• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * $HeadURL: http://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/client/DefaultHttpClient.java $
3  * $Revision: 677250 $
4  * $Date: 2008-07-16 04:45:47 -0700 (Wed, 16 Jul 2008) $
5  *
6  * ====================================================================
7  * Licensed to the Apache Software Foundation (ASF) under one
8  * or more contributor license agreements.  See the NOTICE file
9  * distributed with this work for additional information
10  * regarding copyright ownership.  The ASF licenses this file
11  * to you under the Apache License, Version 2.0 (the
12  * "License"); you may not use this file except in compliance
13  * with the License.  You may obtain a copy of the License at
14  *
15  *   http://www.apache.org/licenses/LICENSE-2.0
16  *
17  * Unless required by applicable law or agreed to in writing,
18  * software distributed under the License is distributed on an
19  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
20  * KIND, either express or implied.  See the License for the
21  * specific language governing permissions and limitations
22  * under the License.
23  * ====================================================================
24  *
25  * This software consists of voluntary contributions made by many
26  * individuals on behalf of the Apache Software Foundation.  For more
27  * information on the Apache Software Foundation, please see
28  * <http://www.apache.org/>.
29  *
30  */
31 
32 package org.apache.http.impl.client;
33 
34 import org.apache.http.ConnectionReuseStrategy;
35 import org.apache.http.HttpVersion;
36 import org.apache.http.auth.AuthSchemeRegistry;
37 import org.apache.http.client.AuthenticationHandler;
38 import org.apache.http.client.CookieStore;
39 import org.apache.http.client.CredentialsProvider;
40 import org.apache.http.client.HttpRequestRetryHandler;
41 import org.apache.http.client.RedirectHandler;
42 import org.apache.http.client.UserTokenHandler;
43 import org.apache.http.client.params.AuthPolicy;
44 import org.apache.http.client.params.ClientPNames;
45 import org.apache.http.client.params.CookiePolicy;
46 import org.apache.http.client.protocol.ClientContext;
47 import org.apache.http.client.protocol.RequestAddCookies;
48 import org.apache.http.client.protocol.RequestDefaultHeaders;
49 import org.apache.http.client.protocol.RequestProxyAuthentication;
50 import org.apache.http.client.protocol.RequestTargetAuthentication;
51 import org.apache.http.client.protocol.ResponseProcessCookies;
52 import org.apache.http.conn.ClientConnectionManager;
53 import org.apache.http.conn.ClientConnectionManagerFactory;
54 import org.apache.http.conn.ConnectionKeepAliveStrategy;
55 import org.apache.http.conn.routing.HttpRoutePlanner;
56 import org.apache.http.conn.scheme.PlainSocketFactory;
57 import org.apache.http.conn.scheme.Scheme;
58 import org.apache.http.conn.scheme.SchemeRegistry;
59 import org.apache.http.conn.ssl.SSLSocketFactory;
60 import org.apache.http.cookie.CookieSpecRegistry;
61 import org.apache.http.impl.DefaultConnectionReuseStrategy;
62 import org.apache.http.impl.auth.BasicSchemeFactory;
63 import org.apache.http.impl.auth.DigestSchemeFactory;
64 import org.apache.http.impl.conn.ProxySelectorRoutePlanner;
65 import org.apache.http.impl.conn.SingleClientConnManager;
66 import org.apache.http.impl.cookie.BestMatchSpecFactory;
67 import org.apache.http.impl.cookie.BrowserCompatSpecFactory;
68 import org.apache.http.impl.cookie.NetscapeDraftSpecFactory;
69 import org.apache.http.impl.cookie.RFC2109SpecFactory;
70 import org.apache.http.impl.cookie.RFC2965SpecFactory;
71 import org.apache.http.params.BasicHttpParams;
72 import org.apache.http.params.HttpParams;
73 import org.apache.http.params.HttpProtocolParams;
74 import org.apache.http.protocol.BasicHttpContext;
75 import org.apache.http.protocol.BasicHttpProcessor;
76 import org.apache.http.protocol.HTTP;
77 import org.apache.http.protocol.HttpContext;
78 import org.apache.http.protocol.HttpRequestExecutor;
79 import org.apache.http.protocol.RequestConnControl;
80 import org.apache.http.protocol.RequestContent;
81 import org.apache.http.protocol.RequestExpectContinue;
82 import org.apache.http.protocol.RequestTargetHost;
83 import org.apache.http.protocol.RequestUserAgent;
84 import org.apache.http.util.VersionInfo;
85 
86 
87 
88 /**
89  * Default implementation of an HTTP client.
90  *
91  * <h3>Prefer HttpURLConnection for new code</h3>
92  * Android includes two HTTP clients: {@code HttpURLConnection} and Apache HTTP
93  * Client. Both support HTTPS, streaming uploads and downloads, configurable
94  * timeouts, IPv6 and connection pooling. Apache HTTP client has fewer bugs in
95  * Android 2.2 (Froyo) and earlier releases. For Android 2.3 (Gingerbread) and
96  * later, {@link java.net.HttpURLConnection HttpURLConnection} is the best
97  * choice. Its simple API and small size makes it great fit for Android.
98  * Transparent compression and response caching reduce network use, improve
99  * speed and save battery. See the <a
100  * href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">Android
101  * Developers Blog</a> for a comparison of the two HTTP clients.
102  *
103  * @author <a href="mailto:rolandw at apache.org">Roland Weber</a>
104  * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
105  *
106  * <!-- empty lines to avoid svn diff problems -->
107  * @version   $Revision: 677250 $
108  *
109  * @since 4.0
110  *
111  * @deprecated Please use {@link java.net.URL#openConnection} instead.
112  *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
113  *     for further details.
114  */
115 @Deprecated
116 public class DefaultHttpClient extends AbstractHttpClient {
117 
118 
119     /**
120      * Creates a new HTTP client from parameters and a connection manager.
121      *
122      * @param params    the parameters
123      * @param conman    the connection manager
124      */
DefaultHttpClient( final ClientConnectionManager conman, final HttpParams params)125     public DefaultHttpClient(
126             final ClientConnectionManager conman,
127             final HttpParams params) {
128         super(conman, params);
129     }
130 
131 
DefaultHttpClient(final HttpParams params)132     public DefaultHttpClient(final HttpParams params) {
133         super(null, params);
134     }
135 
136 
DefaultHttpClient()137     public DefaultHttpClient() {
138         super(null, null);
139     }
140 
141 
142     @Override
createHttpParams()143     protected HttpParams createHttpParams() {
144         HttpParams params = new BasicHttpParams();
145         HttpProtocolParams.setVersion(params,
146                 HttpVersion.HTTP_1_1);
147         HttpProtocolParams.setContentCharset(params,
148                 HTTP.DEFAULT_CONTENT_CHARSET);
149 
150         /*
151          * Android note: Send each request body without first asking the server
152          * whether it will be accepted. Asking first slows down the common case
153          * and results in "417 expectation failed" errors when a HTTP/1.0 server
154          * is behind a proxy. http://b/2471595
155          */
156         HttpProtocolParams.setUseExpectContinue(params,
157                 false); // android-changed
158 
159         // determine the release version from packaged version info
160         final VersionInfo vi = VersionInfo.loadVersionInfo
161             ("org.apache.http.client", getClass().getClassLoader());
162         final String release = (vi != null) ?
163             vi.getRelease() : VersionInfo.UNAVAILABLE;
164         HttpProtocolParams.setUserAgent(params,
165                 "Apache-HttpClient/" + release + " (java 1.4)");
166 
167         return params;
168     }
169 
170 
171     @Override
createRequestExecutor()172     protected HttpRequestExecutor createRequestExecutor() {
173         return new HttpRequestExecutor();
174     }
175 
176 
177     @Override
createClientConnectionManager()178     protected ClientConnectionManager createClientConnectionManager() {
179         SchemeRegistry registry = new SchemeRegistry();
180         registry.register(
181                 new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
182         registry.register(
183                 new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
184 
185         ClientConnectionManager connManager = null;
186         HttpParams params = getParams();
187 
188         ClientConnectionManagerFactory factory = null;
189 
190         // Try first getting the factory directly as an object.
191         factory = (ClientConnectionManagerFactory) params
192                 .getParameter(ClientPNames.CONNECTION_MANAGER_FACTORY);
193         if (factory == null) { // then try getting its class name.
194             String className = (String) params.getParameter(
195                     ClientPNames.CONNECTION_MANAGER_FACTORY_CLASS_NAME);
196             if (className != null) {
197                 try {
198                     Class<?> clazz = Class.forName(className);
199                     factory = (ClientConnectionManagerFactory) clazz.newInstance();
200                 } catch (ClassNotFoundException ex) {
201                     throw new IllegalStateException("Invalid class name: " + className);
202                 } catch (IllegalAccessException ex) {
203                     throw new IllegalAccessError(ex.getMessage());
204                 } catch (InstantiationException ex) {
205                     throw new InstantiationError(ex.getMessage());
206                 }
207             }
208         }
209 
210         if(factory != null) {
211             connManager = factory.newInstance(params, registry);
212         } else {
213             connManager = new SingleClientConnManager(getParams(), registry);
214         }
215 
216         return connManager;
217     }
218 
219 
220     @Override
createHttpContext()221     protected HttpContext createHttpContext() {
222         HttpContext context = new BasicHttpContext();
223         context.setAttribute(
224                 ClientContext.AUTHSCHEME_REGISTRY,
225                 getAuthSchemes());
226         context.setAttribute(
227                 ClientContext.COOKIESPEC_REGISTRY,
228                 getCookieSpecs());
229         context.setAttribute(
230                 ClientContext.COOKIE_STORE,
231                 getCookieStore());
232         context.setAttribute(
233                 ClientContext.CREDS_PROVIDER,
234                 getCredentialsProvider());
235         return context;
236     }
237 
238 
239     @Override
createConnectionReuseStrategy()240     protected ConnectionReuseStrategy createConnectionReuseStrategy() {
241         return new DefaultConnectionReuseStrategy();
242     }
243 
244     @Override
createConnectionKeepAliveStrategy()245     protected ConnectionKeepAliveStrategy createConnectionKeepAliveStrategy() {
246         return new DefaultConnectionKeepAliveStrategy();
247     }
248 
249 
250     @Override
createAuthSchemeRegistry()251     protected AuthSchemeRegistry createAuthSchemeRegistry() {
252         AuthSchemeRegistry registry = new AuthSchemeRegistry();
253         registry.register(
254                 AuthPolicy.BASIC,
255                 new BasicSchemeFactory());
256         registry.register(
257                 AuthPolicy.DIGEST,
258                 new DigestSchemeFactory());
259         return registry;
260     }
261 
262 
263     @Override
createCookieSpecRegistry()264     protected CookieSpecRegistry createCookieSpecRegistry() {
265         CookieSpecRegistry registry = new CookieSpecRegistry();
266         registry.register(
267                 CookiePolicy.BEST_MATCH,
268                 new BestMatchSpecFactory());
269         registry.register(
270                 CookiePolicy.BROWSER_COMPATIBILITY,
271                 new BrowserCompatSpecFactory());
272         registry.register(
273                 CookiePolicy.NETSCAPE,
274                 new NetscapeDraftSpecFactory());
275         registry.register(
276                 CookiePolicy.RFC_2109,
277                 new RFC2109SpecFactory());
278         registry.register(
279                 CookiePolicy.RFC_2965,
280                 new RFC2965SpecFactory());
281         return registry;
282     }
283 
284 
285     @Override
createHttpProcessor()286     protected BasicHttpProcessor createHttpProcessor() {
287         BasicHttpProcessor httpproc = new BasicHttpProcessor();
288         httpproc.addInterceptor(new RequestDefaultHeaders());
289         // Required protocol interceptors
290         httpproc.addInterceptor(new RequestContent());
291         httpproc.addInterceptor(new RequestTargetHost());
292         // Recommended protocol interceptors
293         httpproc.addInterceptor(new RequestConnControl());
294         httpproc.addInterceptor(new RequestUserAgent());
295         httpproc.addInterceptor(new RequestExpectContinue());
296         // HTTP state management interceptors
297         httpproc.addInterceptor(new RequestAddCookies());
298         httpproc.addInterceptor(new ResponseProcessCookies());
299         // HTTP authentication interceptors
300         httpproc.addInterceptor(new RequestTargetAuthentication());
301         httpproc.addInterceptor(new RequestProxyAuthentication());
302         return httpproc;
303     }
304 
305 
306     @Override
createHttpRequestRetryHandler()307     protected HttpRequestRetryHandler createHttpRequestRetryHandler() {
308         return new DefaultHttpRequestRetryHandler();
309     }
310 
311 
312     @Override
createRedirectHandler()313     protected RedirectHandler createRedirectHandler() {
314         return new DefaultRedirectHandler();
315     }
316 
317 
318     @Override
createTargetAuthenticationHandler()319     protected AuthenticationHandler createTargetAuthenticationHandler() {
320         return new DefaultTargetAuthenticationHandler();
321     }
322 
323 
324     @Override
createProxyAuthenticationHandler()325     protected AuthenticationHandler createProxyAuthenticationHandler() {
326         return new DefaultProxyAuthenticationHandler();
327     }
328 
329 
330     @Override
createCookieStore()331     protected CookieStore createCookieStore() {
332         return new BasicCookieStore();
333     }
334 
335 
336     @Override
createCredentialsProvider()337     protected CredentialsProvider createCredentialsProvider() {
338         return new BasicCredentialsProvider();
339     }
340 
341 
342     @Override
createHttpRoutePlanner()343     protected HttpRoutePlanner createHttpRoutePlanner() {
344         // BEGIN android-changed
345         //     Use the proxy specified by system properties
346         return new ProxySelectorRoutePlanner(getConnectionManager().getSchemeRegistry(), null);
347         // END android-changed
348     }
349 
350 
351     @Override
createUserTokenHandler()352     protected UserTokenHandler createUserTokenHandler() {
353         return new DefaultUserTokenHandler();
354     }
355 
356 } // class DefaultHttpClient
357