/* */ package com.loopj.android.http;
/* */
/* */ import android.content.Context;
/* */ import java.io.IOException;
/* */ import java.io.InputStream;
/* */ import java.lang.ref.WeakReference;
/* */ import java.util.HashMap;
/* */ import java.util.LinkedList;
/* */ import java.util.List;
/* */ import java.util.Map;
/* */ import java.util.WeakHashMap;
/* */ import java.util.concurrent.ExecutorService;
/* */ import java.util.concurrent.Executors;
/* */ import java.util.concurrent.Future;
/* */ import java.util.zip.GZIPInputStream;
/* */ import org.apache.http.Header;
/* */ import org.apache.http.HeaderElement;
/* */ import org.apache.http.HttpEntity;
/* */ import org.apache.http.HttpRequest;
/* */ import org.apache.http.HttpRequestInterceptor;
/* */ import org.apache.http.HttpResponse;
/* */ import org.apache.http.HttpResponseInterceptor;
/* */ import org.apache.http.HttpVersion;
/* */ import org.apache.http.auth.AuthScope;
/* */ import org.apache.http.auth.UsernamePasswordCredentials;
/* */ import org.apache.http.client.CookieStore;
/* */ import org.apache.http.client.CredentialsProvider;
/* */ import org.apache.http.client.HttpClient;
/* */ import org.apache.http.client.methods.HttpDelete;
/* */ import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
/* */ import org.apache.http.client.methods.HttpGet;
/* */ import org.apache.http.client.methods.HttpPost;
/* */ import org.apache.http.client.methods.HttpPut;
/* */ import org.apache.http.client.methods.HttpUriRequest;
/* */ import org.apache.http.conn.ClientConnectionManager;
/* */ import org.apache.http.conn.params.ConnManagerParams;
/* */ import org.apache.http.conn.params.ConnPerRouteBean;
/* */ import org.apache.http.conn.scheme.PlainSocketFactory;
/* */ import org.apache.http.conn.scheme.Scheme;
/* */ import org.apache.http.conn.scheme.SchemeRegistry;
/* */ import org.apache.http.conn.ssl.SSLSocketFactory;
/* */ import org.apache.http.entity.HttpEntityWrapper;
/* */ import org.apache.http.impl.client.DefaultHttpClient;
/* */ import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
/* */ import org.apache.http.params.BasicHttpParams;
/* */ import org.apache.http.params.HttpConnectionParams;
/* */ import org.apache.http.params.HttpParams;
/* */ import org.apache.http.params.HttpProtocolParams;
/* */ import org.apache.http.protocol.BasicHttpContext;
/* */ import org.apache.http.protocol.HttpContext;
/* */ import org.apache.http.protocol.SyncBasicHttpContext;
/* */
/* */ public class AsyncHttpClient
/* */ {
/* */ private static final String VERSION = "1.4.3";
/* */ private static final int DEFAULT_MAX_CONNECTIONS = 10;
/* */ private static final int DEFAULT_SOCKET_TIMEOUT = 10000;
/* */ private static final int DEFAULT_MAX_RETRIES = 5;
/* */ private static final int DEFAULT_SOCKET_BUFFER_SIZE = 8192;
/* */ private static final String HEADER_ACCEPT_ENCODING = "Accept-Encoding";
/* */ private static final String ENCODING_GZIP = "gzip";
/* 103 */ private static int maxConnections = 10;
/* 104 */ private static int socketTimeout = 10000;
/* */ private final DefaultHttpClient httpClient;
/* */ private final HttpContext httpContext;
/* */ private ExecutorService threadPool;
/* */ private final Map<Context, List<WeakReference<Future<?>>>> requestMap;
/* */ private final Map<String, String> clientHeaderMap;
/* */
/* */ public AsyncHttpClient()
/* */ {
/* 117 */ BasicHttpParams httpParams = new BasicHttpParams();
/* */
/* 119 */ ConnManagerParams.setTimeout(httpParams, socketTimeout);
/* 120 */ ConnManagerParams.setMaxConnectionsPerRoute(httpParams, new ConnPerRouteBean(maxConnections));
/* 121 */ ConnManagerParams.setMaxTotalConnections(httpParams, 10);
/* */
/* 123 */ HttpConnectionParams.setSoTimeout(httpParams, socketTimeout);
/* 124 */ HttpConnectionParams.setConnectionTimeout(httpParams, socketTimeout);
/* 125 */ HttpConnectionParams.setTcpNoDelay(httpParams, true);
/* 126 */ HttpConnectionParams.setSocketBufferSize(httpParams, 8192);
/* */
/* 128 */ HttpProtocolParams.setVersion(httpParams, HttpVersion.HTTP_1_1);
/* 129 */ HttpProtocolParams.setUserAgent(httpParams, String.format("android-async-http/%s (http://loopj.com/android-async-http)", new Object[] { "1.4.3" }));
/* */
/* 131 */ SchemeRegistry schemeRegistry = new SchemeRegistry();
/* 132 */ schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
/* 133 */ schemeRegistry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
/* 134 */ ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager(httpParams, schemeRegistry);
/* */
/* 136 */ this.httpContext = new SyncBasicHttpContext(new BasicHttpContext());
/* 137 */ this.httpClient = new DefaultHttpClient(cm, httpParams);
/* 138 */ this.httpClient.addRequestInterceptor(new HttpRequestInterceptor()
/* */ {
/* */ public void process(HttpRequest request, HttpContext context) {
/* 141 */ if (!request.containsHeader("Accept-Encoding")) {
/* 142 */ request.addHeader("Accept-Encoding", "gzip");
/* */ }
/* 144 */ for (String header : AsyncHttpClient.this.clientHeaderMap.keySet())
/* 145 */ request.addHeader(header, (String)AsyncHttpClient.this.clientHeaderMap.get(header));
/* */ }
/* */ });
/* 150 */ this.httpClient.addResponseInterceptor(new HttpResponseInterceptor()
/* */ {
/* */ public void process(HttpResponse response, HttpContext context) {
/* 153 */ HttpEntity entity = response.getEntity();
/* 154 */ if (entity == null) {
/* 155 */ return;
/* */ }
/* 157 */ Header encoding = entity.getContentEncoding();
/* 158 */ if (encoding != null)
/* 159 */ for (HeaderElement element : encoding.getElements())
/* 160 */ if (element.getName().equalsIgnoreCase("gzip")) {
/* 161 */ response.setEntity(new AsyncHttpClient.InflatingEntity(response.getEntity()));
/* 162 */ break;
/* */ }
/* */ }
/* */ });
/* 169 */ this.httpClient.setHttpRequestRetryHandler(new RetryHandler(5));
/* */
/* 171 */ this.threadPool = Executors.newCachedThreadPool();
/* */
/* 173 */ this.requestMap = new WeakHashMap();
/* 174 */ this.clientHeaderMap = new HashMap();
/* */ }
/* */
/* */ public HttpClient getHttpClient()
/* */ {
/* 183 */ return this.httpClient;
/* */ }
/* */
/* */ public HttpContext getHttpContext()
/* */ {
/* 192 */ return this.httpContext;
/* */ }
/* */
/* */ public void setCookieStore(CookieStore cookieStore)
/* */ {
/* 200 */ this.httpContext.setAttribute("http.cookie-store", cookieStore);
/* */ }
/* */
/* */ public void setThreadPool(ExecutorService threadPool)
/* */ {
/* 209 */ this.threadPool = threadPool;
/* */ }
/* */
/* */ public void setUserAgent(String userAgent)
/* */ {
/* 218 */ HttpProtocolParams.setUserAgent(this.httpClient.getParams(), userAgent);
/* */ }
/* */
/* */ public void setTimeout(int timeout)
/* */ {
/* 226 */ HttpParams httpParams = this.httpClient.getParams();
/* 227 */ ConnManagerParams.setTimeout(httpParams, timeout);
/* 228 */ HttpConnectionParams.setSoTimeout(httpParams, timeout);
/* 229 */ HttpConnectionParams.setConnectionTimeout
Android Asynchronous HTTPClient的实现和优化
5星 · 超过95%的资源 需积分: 9 2 浏览量
2013-07-23
17:19:40
上传
评论
收藏 17KB ZIP 举报
a_maker
- 粉丝: 6
- 资源: 10
- 1
- 2
前往页