/* * ==================================================================== * 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 * <http://www.apache.org/>. * */ package org.apache.ogt.http.impl.client; import org.apache.ogt.http.HttpVersion; import org.apache.ogt.http.annotation.ThreadSafe; import org.apache.ogt.http.client.HttpClient; import org.apache.ogt.http.client.protocol.RequestAddCookies; import org.apache.ogt.http.client.protocol.RequestAuthCache; import org.apache.ogt.http.client.protocol.RequestClientConnControl; import org.apache.ogt.http.client.protocol.RequestDefaultHeaders; import org.apache.ogt.http.client.protocol.RequestProxyAuthentication; import org.apache.ogt.http.client.protocol.RequestTargetAuthentication; import org.apache.ogt.http.client.protocol.ResponseAuthCache; import org.apache.ogt.http.client.protocol.ResponseProcessCookies; import org.apache.ogt.http.conn.ClientConnectionManager; import org.apache.ogt.http.params.CoreConnectionPNames; import org.apache.ogt.http.params.CoreProtocolPNames; import org.apache.ogt.http.params.HttpConnectionParams; import org.apache.ogt.http.params.HttpParams; import org.apache.ogt.http.params.HttpProtocolParams; import org.apache.ogt.http.params.SyncBasicHttpParams; import org.apache.ogt.http.protocol.BasicHttpProcessor; import org.apache.ogt.http.protocol.HTTP; import org.apache.ogt.http.protocol.RequestContent; import org.apache.ogt.http.protocol.RequestExpectContinue; import org.apache.ogt.http.protocol.RequestTargetHost; import org.apache.ogt.http.protocol.RequestUserAgent; import org.apache.ogt.http.util.VersionInfo; /** * Default implementation of {@link HttpClient} pre-configured for most common use scenarios. * <p> * This class creates the following chain of protocol interceptors per default: * <ul> * <li>{@link RequestDefaultHeaders}</li> * <li>{@link RequestContent}</li> * <li>{@link RequestTargetHost}</li> * <li>{@link RequestClientConnControl}</li> * <li>{@link RequestUserAgent}</li> * <li>{@link RequestExpectContinue}</li> * <li>{@link RequestAddCookies}</li> * <li>{@link ResponseProcessCookies}</li> * <li>{@link RequestTargetAuthentication}</li> * <li>{@link RequestProxyAuthentication}</li> * </ul> * <p> * This class sets up the following parameters if not explicitly set: * <ul> * <li>Version: HttpVersion.HTTP_1_1</li> * <li>ContentCharset: HTTP.DEFAULT_CONTENT_CHARSET</li> * <li>NoTcpDelay: true</li> * <li>SocketBufferSize: 8192</li> * <li>UserAgent: Apache-HttpClient/release (java 1.5)</li> * </ul> * <p> * The following parameters can be used to customize the behavior of this * class: * <ul> * <li>{@link org.apache.ogt.http.params.CoreProtocolPNames#PROTOCOL_VERSION}</li> * <li>{@link org.apache.ogt.http.params.CoreProtocolPNames#STRICT_TRANSFER_ENCODING}</li> * <li>{@link org.apache.ogt.http.params.CoreProtocolPNames#HTTP_ELEMENT_CHARSET}</li> * <li>{@link org.apache.ogt.http.params.CoreProtocolPNames#USE_EXPECT_CONTINUE}</li> * <li>{@link org.apache.ogt.http.params.CoreProtocolPNames#WAIT_FOR_CONTINUE}</li> * <li>{@link org.apache.ogt.http.params.CoreProtocolPNames#USER_AGENT}</li> * <li>{@link org.apache.ogt.http.params.CoreConnectionPNames#TCP_NODELAY}</li> * <li>{@link org.apache.ogt.http.params.CoreConnectionPNames#SO_TIMEOUT}</li> * <li>{@link org.apache.ogt.http.params.CoreConnectionPNames#SO_LINGER}</li> * <li>{@link org.apache.ogt.http.params.CoreConnectionPNames#SO_REUSEADDR}</li> * <li>{@link org.apache.ogt.http.params.CoreConnectionPNames#SOCKET_BUFFER_SIZE}</li> * <li>{@link org.apache.ogt.http.params.CoreConnectionPNames#CONNECTION_TIMEOUT}</li> * <li>{@link org.apache.ogt.http.params.CoreConnectionPNames#MAX_LINE_LENGTH}</li> * <li>{@link org.apache.ogt.http.params.CoreConnectionPNames#MAX_HEADER_COUNT}</li> * <li>{@link org.apache.ogt.http.params.CoreConnectionPNames#STALE_CONNECTION_CHECK}</li> * <li>{@link org.apache.ogt.http.conn.params.ConnRoutePNames#FORCED_ROUTE}</li> * <li>{@link org.apache.ogt.http.conn.params.ConnRoutePNames#LOCAL_ADDRESS}</li> * <li>{@link org.apache.ogt.http.conn.params.ConnRoutePNames#DEFAULT_PROXY}</li> * <li>{@link org.apache.ogt.http.cookie.params.CookieSpecPNames#DATE_PATTERNS}</li> * <li>{@link org.apache.ogt.http.cookie.params.CookieSpecPNames#SINGLE_COOKIE_HEADER}</li> * <li>{@link org.apache.ogt.http.auth.params.AuthPNames#CREDENTIAL_CHARSET}</li> * <li>{@link org.apache.ogt.http.client.params.ClientPNames#COOKIE_POLICY}</li> * <li>{@link org.apache.ogt.http.client.params.ClientPNames#HANDLE_AUTHENTICATION}</li> * <li>{@link org.apache.ogt.http.client.params.ClientPNames#HANDLE_REDIRECTS}</li> * <li>{@link org.apache.ogt.http.client.params.ClientPNames#MAX_REDIRECTS}</li> * <li>{@link org.apache.ogt.http.client.params.ClientPNames#ALLOW_CIRCULAR_REDIRECTS}</li> * <li>{@link org.apache.ogt.http.client.params.ClientPNames#VIRTUAL_HOST}</li> * <li>{@link org.apache.ogt.http.client.params.ClientPNames#DEFAULT_HOST}</li> * <li>{@link org.apache.ogt.http.client.params.ClientPNames#DEFAULT_HEADERS}</li> * <li>{@link org.apache.ogt.http.client.params.ClientPNames#CONNECTION_MANAGER_FACTORY_CLASS_NAME}</li> * </ul> * * @since 4.0 */ @ThreadSafe public class DefaultHttpClient extends AbstractHttpClient { /** * Creates a new HTTP client from parameters and a connection manager. * * @param params the parameters * @param conman the connection manager */ public DefaultHttpClient( final ClientConnectionManager conman, final HttpParams params) { super(conman, params); } /** * @since 4.1 */ public DefaultHttpClient( final ClientConnectionManager conman) { super(conman, null); } public DefaultHttpClient(final HttpParams params) { super(null, params); } public DefaultHttpClient() { super(null, null); } /** * Creates the default set of HttpParams by invoking {@link DefaultHttpClient#setDefaultHttpParams(HttpParams)} * * @return a new instance of {@link SyncBasicHttpParams} with the defaults applied to it. */ @Override protected HttpParams createHttpParams() { HttpParams params = new SyncBasicHttpParams(); setDefaultHttpParams(params); return params; } /** * Saves the default set of HttpParams in the provided parameter. * These are: * <ul> * <li>{@link CoreProtocolPNames#PROTOCOL_VERSION}: 1.1</li> * <li>{@link CoreProtocolPNames#HTTP_CONTENT_CHARSET}: ISO-8859-1</li> * <li>{@link CoreConnectionPNames#TCP_NODELAY}: true</li> * <li>{@link CoreConnectionPNames#SOCKET_BUFFER_SIZE}: 8192</li> * <li>{@link CoreProtocolPNames#USER_AGENT}: Apache-HttpClient/<release> (java 1.5)</li> * </ul> */ public static void setDefaultHttpParams(HttpParams params) { HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); HttpProtocolParams.setContentCharset(params, HTTP.DEFAULT_CONTENT_CHARSET); HttpConnectionParams.setTcpNoDelay(params, true); HttpConnectionParams.setSocketBufferSize(params, 8192); // determine the release version from packaged version info final VersionInfo vi = VersionInfo.loadVersionInfo ("org.apache.ogt.http.client", DefaultHttpClient.class.getClassLoader()); final String release = (vi != null) ? vi.getRelease() : VersionInfo.UNAVAILABLE; HttpProtocolParams.setUserAgent(params, "Apache-HttpClient/" + release + " (java 1.5)"); } @Override protected BasicHttpProcessor createHttpProcessor() { BasicHttpProcessor httpproc = new BasicHttpProcessor(); httpproc.addInterceptor(new RequestDefaultHeaders()); // Required protocol interceptors httpproc.addInterceptor(new RequestContent()); httpproc.addInterceptor(new RequestTargetHost()); // Recommended protocol interceptors httpproc.addInterceptor(new RequestClientConnControl()); httpproc.addInterceptor(new RequestUserAgent()); httpproc.addInterceptor(new RequestExpectContinue()); // HTTP state management interceptors httpproc.addInterceptor(new RequestAddCookies()); httpproc.addInterceptor(new ResponseProcessCookies()); // HTTP authentication interceptors httpproc.addInterceptor(new RequestAuthCache()); httpproc.addInterceptor(new ResponseAuthCache()); httpproc.addInterceptor(new RequestTargetAuthentication()); httpproc.addInterceptor(new RequestProxyAuthentication()); return httpproc; } }