All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.commons.httpclient.params.HttpMethodParams Maven / Gradle / Ivy

The newest version!
/*
 * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//httpclient/src/java/org/apache/commons/httpclient/params/HttpMethodParams.java,v 1.17 2004/10/06 17:32:04 olegk Exp $
 * $Revision: 483949 $
 * $Date: 2006-12-08 12:34:50 +0100 (Fri, 08 Dec 2006) $
 *
 * ====================================================================
 *
 *  Licensed to the Apache Software Foundation (ASF) under one or more
 *  contributor license agreements.  See the NOTICE file distributed with
 *  this work for additional information regarding copyright ownership.
 *  The ASF licenses this file to You under the Apache License, Version 2.0
 *  (the "License"); you may not use this file except in compliance with
 *  the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 * ====================================================================
 *
 * This software consists of voluntary contributions made by many
 * individuals on behalf of the Apache Software Foundation.  For more
 * information on the Apache Software Foundation, please see
 * .
 *
 */

package org.apache.commons.httpclient.params;

import org.apache.commons.httpclient.HttpVersion;
import org.apache.commons.httpclient.cookie.CookiePolicy;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * This class represents a collection of HTTP protocol parameters applicable to 
 * {@link org.apache.commons.httpclient.HttpMethod HTTP methods}. Protocol 
 * parameters may be linked together to form a hierarchy. If a particular 
 * parameter value has not been explicitly defined in the collection itself, 
 * its value will be drawn from the parent collection of parameters.
 * 
 * @author Oleg Kalnichevski
 * @author Christian Kohlschuetter
 * 
 * @version $Revision: 483949 $
 * 
 * @since 3.0
 */
public class HttpMethodParams extends DefaultHttpParams {

    /** Log object for this class. */
    private static final Log LOG = LogFactory.getLog(HttpMethodParams.class);

    /**
     * Defines the content of the User-Agent header used by  
     * {@link org.apache.commons.httpclient.HttpMethod HTTP methods}.
     * 

* This parameter expects a value of type {@link String}. *

*/ public static final String USER_AGENT = "http.useragent"; /** * Defines the {@link HttpVersion HTTP protocol version} used by * {@link org.apache.commons.httpclient.HttpMethod HTTP methods} per * default. *

* This parameter expects a value of type {@link HttpVersion}. *

*/ public static final String PROTOCOL_VERSION = "http.protocol.version"; /** * Defines whether {@link org.apache.commons.httpclient.HttpMethod HTTP methods} should * reject ambiguous {@link org.apache.commons.httpclient.StatusLine HTTP status line}. *

* This parameter expects a value of type {@link Boolean}. *

*/ public static final String UNAMBIGUOUS_STATUS_LINE = "http.protocol.unambiguous-statusline"; /** * Defines whether {@link org.apache.commons.httpclient.Cookie cookies} should be put on * a single {@link org.apache.commons.httpclient.Header response header}. *

* This parameter expects a value of type {@link Boolean}. *

*/ public static final String SINGLE_COOKIE_HEADER = "http.protocol.single-cookie-header"; /** * Defines whether responses with an invalid Transfer-Encoding header should be * rejected. *

* This parameter expects a value of type {@link Boolean}. *

*/ public static final String STRICT_TRANSFER_ENCODING = "http.protocol.strict-transfer-encoding"; /** * Defines whether the content body sent in response to * {@link org.apache.commons.httpclient.methods.HeadMethod} should be rejected. *

* This parameter expects a value of type {@link Boolean}. *

*/ public static final String REJECT_HEAD_BODY = "http.protocol.reject-head-body"; /** * Sets period of time in milliseconds to wait for a content body sent in response to * {@link org.apache.commons.httpclient.methods.HeadMethod HEAD method} from a * non-compliant server. If the parameter is not set or set to -1 non-compliant * response body check is disabled. *

* This parameter expects a value of type {@link Integer}. *

*/ public static final String HEAD_BODY_CHECK_TIMEOUT = "http.protocol.head-body-timeout"; /** *

* Activates 'Expect: 100-Continue' handshake for the * {@link org.apache.commons.httpclient.methods.ExpectContinueMethod * entity enclosing methods}. The purpose of the 'Expect: 100-Continue' * handshake to allow a client that is sending a request message with * a request body to determine if the origin server is willing to * accept the request (based on the request headers) before the client * sends the request body. *

* *

* The use of the 'Expect: 100-continue' handshake can result in * noticable peformance improvement for entity enclosing requests * (such as POST and PUT) that require the target server's * authentication. *

* *

* 'Expect: 100-continue' handshake should be used with * caution, as it may cause problems with HTTP servers and * proxies that do not support HTTP/1.1 protocol. *

* * This parameter expects a value of type {@link Boolean}. */ public static final String USE_EXPECT_CONTINUE = "http.protocol.expect-continue"; /** * Defines the charset to be used when encoding * {@link org.apache.commons.httpclient.Credentials}. If not defined then the * {@link #HTTP_ELEMENT_CHARSET} should be used. *

* This parameter expects a value of type {@link String}. *

*/ public static final String CREDENTIAL_CHARSET = "http.protocol.credential-charset"; /** * Defines the charset to be used for encoding HTTP protocol elements. *

* This parameter expects a value of type {@link String}. *

*/ public static final String HTTP_ELEMENT_CHARSET = "http.protocol.element-charset"; /** * Defines the charset to be used for parsing URIs. *

* This parameter expects a value of type {@link String}. *

*/ public static final String HTTP_URI_CHARSET = "http.protocol.uri-charset"; /** * Defines the charset to be used for encoding content body. *

* This parameter expects a value of type {@link String}. *

*/ public static final String HTTP_CONTENT_CHARSET = "http.protocol.content-charset"; /** * Defines {@link CookiePolicy cookie policy} to be used for cookie management. *

* This parameter expects a value of type {@link String}. *

*/ public static final String COOKIE_POLICY = "http.protocol.cookie-policy"; /** * Defines HttpClient's behavior when a response provides more bytes than * expected (specified with Content-Length, for example). *

* Such surplus data makes the HTTP connection unreliable for keep-alive * requests, as malicious response data (faked headers etc.) can lead to undesired * results on the next request using that connection. *

*

* If this parameter is set to true, any detection of extra * input data will generate a warning in the log. *

*

* This parameter expects a value of type {@link Boolean}. *

*/ public static final String WARN_EXTRA_INPUT = "http.protocol.warn-extra-input"; /** * Defines the maximum number of ignorable lines before we expect * a HTTP response's status code. *

* With HTTP/1.1 persistent connections, the problem arises that * broken scripts could return a wrong Content-Length * (there are more bytes sent than specified).
* Unfortunately, in some cases, this is not possible after the bad response, * but only before the next one.
* So, HttpClient must be able to skip those surplus lines this way. *

*

* Set this to 0 to disallow any garbage/empty lines before the status line.
* To specify no limit, use {@link java.lang.Integer#MAX_VALUE} (default in lenient mode). *

* * This parameter expects a value of type {@link Integer}. */ public static final String STATUS_LINE_GARBAGE_LIMIT = "http.protocol.status-line-garbage-limit"; /** * Sets the socket timeout (SO_TIMEOUT) in milliseconds to be used when executing the method. * A timeout value of zero is interpreted as an infinite timeout. *

* This parameter expects a value of type {@link Integer}. *

* @see java.net.SocketOptions#SO_TIMEOUT */ public static final String SO_TIMEOUT = "http.socket.timeout"; /** * The key used to look up the date patterns used for parsing. The String patterns are stored * in a {@link java.util.Collection} and must be compatible with * {@link java.text.SimpleDateFormat}. *

* This parameter expects a value of type {@link java.util.Collection}. *

*/ public static final String DATE_PATTERNS = "http.dateparser.patterns"; /** * Sets the method retry handler parameter. *

* This parameter expects a value of type {@link org.apache.commons.httpclient.HttpMethodRetryHandler}. *

*/ public static final String RETRY_HANDLER = "http.method.retry-handler"; /** * Sets the maximum buffered response size (in bytes) that triggers no warning. Buffered * responses exceeding this size will trigger a warning in the log. *

* This parameter expects a value if type {@link Integer}. *

*/ public static final String BUFFER_WARN_TRIGGER_LIMIT = "http.method.response.buffer.warnlimit"; /** * Defines the virtual host name. *

* This parameter expects a value of type {@link java.lang.String}. *

*/ public static final String VIRTUAL_HOST = "http.virtual-host"; /** * Sets the value to use as the multipart boundary. *

* This parameter expects a value if type {@link String}. *

* @see org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity */ public static final String MULTIPART_BOUNDARY = "http.method.multipart.boundary"; /** * Creates a new collection of parameters with the collection returned * by {@link #getDefaultParams()} as a parent. The collection will defer * to its parent for a default value if a particular parameter is not * explicitly set in the collection itself. * * @see #getDefaultParams() */ public HttpMethodParams() { super(getDefaultParams()); } /** * Creates a new collection of parameters with the given parent. * The collection will defer to its parent for a default value * if a particular parameter is not explicitly set in the collection * itself. * * @param defaults the parent collection to defer to, if a parameter * is not explictly set in the collection itself. * * @see #getDefaultParams() */ public HttpMethodParams(HttpParams defaults) { super(defaults); } /** * Returns the charset to be used for writing HTTP headers. * @return The charset */ public String getHttpElementCharset() { String charset = (String) getParameter(HTTP_ELEMENT_CHARSET); if (charset == null) { LOG.warn("HTTP element charset not configured, using US-ASCII"); charset = "US-ASCII"; } return charset; } /** * Sets the charset to be used for writing HTTP headers. * @param charset The charset */ public void setHttpElementCharset(String charset) { setParameter(HTTP_ELEMENT_CHARSET, charset); } /** * Returns the default charset to be used for writing content body, * when no charset explicitly specified. * @return The charset */ public String getContentCharset() { String charset = (String) getParameter(HTTP_CONTENT_CHARSET); if (charset == null) { LOG.warn("Default content charset not configured, using ISO-8859-1"); charset = "ISO-8859-1"; } return charset; } /** * Sets the charset to be used for parsing URIs. * @param charset The charset */ public void setUriCharset(String charset) { setParameter(HTTP_URI_CHARSET, charset); } /** * Returns the charset to be used for parsing URIs. * @return The charset */ public String getUriCharset() { String charset = (String) getParameter(HTTP_URI_CHARSET); if (charset == null) { charset = "UTF-8"; } return charset; } /** * Sets the default charset to be used for writing content body, * when no charset explicitly specified. * @param charset The charset */ public void setContentCharset(String charset) { setParameter(HTTP_CONTENT_CHARSET, charset); } /** * Returns the charset to be used for {@link org.apache.commons.httpclient.Credentials}. If * not configured the {@link #HTTP_ELEMENT_CHARSET HTTP element charset} is used. * @return The charset */ public String getCredentialCharset() { String charset = (String) getParameter(CREDENTIAL_CHARSET); if (charset == null) { LOG.debug("Credential charset not configured, using HTTP element charset"); charset = getHttpElementCharset(); } return charset; } /** * Sets the charset to be used for writing HTTP headers. * @param charset The charset */ public void setCredentialCharset(String charset) { setParameter(CREDENTIAL_CHARSET, charset); } /** * Returns {@link HttpVersion HTTP protocol version} to be used by the * {@link org.apache.commons.httpclient.HttpMethod HTTP methods} that * this collection of parameters applies to. * * @return {@link HttpVersion HTTP protocol version} */ public HttpVersion getVersion() { Object param = getParameter(PROTOCOL_VERSION); if (param == null) { return HttpVersion.HTTP_1_1; } return (HttpVersion)param; } /** * Assigns the {@link HttpVersion HTTP protocol version} to be used by the * {@link org.apache.commons.httpclient.HttpMethod HTTP methods} that * this collection of parameters applies to. * * @param version the {@link HttpVersion HTTP protocol version} */ public void setVersion(HttpVersion version) { setParameter(PROTOCOL_VERSION, version); } /** * Returns {@link CookiePolicy cookie policy} to be used by the * {@link org.apache.commons.httpclient.HttpMethod HTTP methods} * this collection of parameters applies to. * * @return {@link CookiePolicy cookie policy} */ public String getCookiePolicy() { Object param = getParameter(COOKIE_POLICY); if (param == null) { return CookiePolicy.DEFAULT; } return (String)param; } /** * Assigns the {@link CookiePolicy cookie policy} to be used by the * {@link org.apache.commons.httpclient.HttpMethod HTTP methods} * this collection of parameters applies to. * * @param policy the {@link CookiePolicy cookie policy} */ public void setCookiePolicy(String policy) { setParameter(COOKIE_POLICY, policy); } /** * Returns the default socket timeout (SO_TIMEOUT) in milliseconds which is the * timeout for waiting for data. A timeout value of zero is interpreted as an infinite * timeout. * * @return timeout in milliseconds */ public int getSoTimeout() { return getIntParameter(SO_TIMEOUT, 0); } /** * Sets the default socket timeout (SO_TIMEOUT) in milliseconds which is the * timeout for waiting for data. A timeout value of zero is interpreted as an infinite * timeout. * * @param timeout Timeout in milliseconds */ public void setSoTimeout(int timeout) { setIntParameter(SO_TIMEOUT, timeout); } /** * Sets the virtual host name. * * @param hostname The host name */ public void setVirtualHost(final String hostname) { setParameter(VIRTUAL_HOST, hostname); } /** * Returns the virtual host name. * * @return The virtual host name */ public String getVirtualHost() { return (String) getParameter(VIRTUAL_HOST); } private static final String[] PROTOCOL_STRICTNESS_PARAMETERS = { UNAMBIGUOUS_STATUS_LINE, SINGLE_COOKIE_HEADER, STRICT_TRANSFER_ENCODING, REJECT_HEAD_BODY, WARN_EXTRA_INPUT }; /** * Makes the {@link org.apache.commons.httpclient.HttpMethod HTTP methods} * strictly follow the HTTP protocol specification (RFC 2616 and other relevant RFCs). * It must be noted that popular HTTP agents have different degree of HTTP protocol * compliance and some HTTP serves are programmed to expect the behaviour that does not * strictly adhere to the HTTP specification. */ public void makeStrict() { setParameters(PROTOCOL_STRICTNESS_PARAMETERS, Boolean.TRUE); setIntParameter(STATUS_LINE_GARBAGE_LIMIT, 0); } /** * Makes the {@link org.apache.commons.httpclient.HttpMethod HTTP methods} * attempt to mimic the exact behaviour of commonly used HTTP agents, * which many HTTP servers expect, even though such behaviour may violate * the HTTP protocol specification (RFC 2616 and other relevant RFCs). */ public void makeLenient() { setParameters(PROTOCOL_STRICTNESS_PARAMETERS, Boolean.FALSE); setIntParameter(STATUS_LINE_GARBAGE_LIMIT, Integer.MAX_VALUE); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy