HttpUtils注释

来源:互联网 发布:淘宝妹子李小芳 编辑:程序博客网 时间:2024/05/16 09:05
  1. /* 
  2.  
  3.  
  4. /** 
  5.  * 网络请求工具类 
  6.  * @author 阿福 
  7.  * 
  8.  */  
  9. public class HttpUtils {  
  10.   
  11.     public final static HttpCache sHttpCache = new HttpCache();  
  12.   
  13.     private final DefaultHttpClient httpClient;  
  14.     private final HttpContext httpContext = new BasicHttpContext();  
  15.   
  16.     private HttpRedirectHandler httpRedirectHandler;  
  17.   
  18.     /** 
  19.      * 构造方法,默认联网15秒超时 
  20.      */  
  21.     public HttpUtils() {  
  22.         this(HttpUtils.DEFAULT_CONN_TIMEOUT, null);  
  23.     }  
  24.   
  25.     /** 
  26.      * 构造方法设置超时时间 
  27.      * @param connTimeout 超时时间毫秒 
  28.      */  
  29.     public HttpUtils(int connTimeout) {  
  30.         this(connTimeout, null);  
  31.     }  
  32.   
  33.     /** 
  34.      * 构造方法,浏览器的信息包 
  35.      * @param userAgent 
  36.      */  
  37.     public HttpUtils(String userAgent) {  
  38.         this(HttpUtils.DEFAULT_CONN_TIMEOUT, userAgent);  
  39.     }  
  40.   
  41.     /** 
  42.      * 构造方法 
  43.      * @param connTimeout 链接超时时间,毫秒单位 
  44.      * @param userAgent  浏览器的信息包 
  45.      */  
  46.     public HttpUtils(int connTimeout, String userAgent) {  
  47.         HttpParams params = new BasicHttpParams();  
  48.   
  49.         ConnManagerParams.setTimeout(params, connTimeout);  
  50.         HttpConnectionParams.setSoTimeout(params, connTimeout);  
  51.         HttpConnectionParams.setConnectionTimeout(params, connTimeout);  
  52.   
  53.         if (TextUtils.isEmpty(userAgent)) {  
  54.             userAgent = OtherUtils.getUserAgent(null);  
  55.         }  
  56.         HttpProtocolParams.setUserAgent(params, userAgent);  
  57.   
  58.         ConnManagerParams.setMaxConnectionsPerRoute(params, new ConnPerRouteBean(10));  
  59.         ConnManagerParams.setMaxTotalConnections(params, 10);  
  60.   
  61.         HttpConnectionParams.setTcpNoDelay(params, true);  
  62.         HttpConnectionParams.setSocketBufferSize(params, 1024 * 8);  
  63.         HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);  
  64.   
  65.         SchemeRegistry schemeRegistry = new SchemeRegistry();  
  66.         schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));  
  67.         schemeRegistry.register(new Scheme("https", DefaultSSLSocketFactory.getSocketFactory(), 443));  
  68.   
  69.         httpClient = new DefaultHttpClient(new ThreadSafeClientConnManager(params, schemeRegistry), params);  
  70.   
  71.         httpClient.setHttpRequestRetryHandler(new RetryHandler(DEFAULT_RETRY_TIMES));  
  72.   
  73.         httpClient.addRequestInterceptor(new HttpRequestInterceptor() {  
  74.             @Override  
  75.             public void process(org.apache.http.HttpRequest httpRequest, HttpContext httpContext) throws org.apache.http.HttpException, IOException {  
  76.                 if (!httpRequest.containsHeader(HEADER_ACCEPT_ENCODING)) {  
  77.                     httpRequest.addHeader(HEADER_ACCEPT_ENCODING, ENCODING_GZIP);  
  78.                 }  
  79.             }  
  80.         });  
  81.   
  82.         httpClient.addResponseInterceptor(new HttpResponseInterceptor() {  
  83.             @Override  
  84.             public void process(HttpResponse response, HttpContext httpContext) throws org.apache.http.HttpException, IOException {  
  85.                 final HttpEntity entity = response.getEntity();  
  86.                 if (entity == null) {  
  87.                     return;  
  88.                 }  
  89.                 final Header encoding = entity.getContentEncoding();  
  90.                 if (encoding != null) {  
  91.                     for (HeaderElement element : encoding.getElements()) {  
  92.                         if (element.getName().equalsIgnoreCase("gzip")) {  
  93.                             response.setEntity(new GZipDecompressingEntity(response.getEntity()));  
  94.                             return;  
  95.                         }  
  96.                     }  
  97.                 }  
  98.             }  
  99.         });  
  100.     }  
  101.   
  102.     // ************************************    default settings & fields ****************************  
  103.   
  104.       
  105.     private String responseTextCharset = HTTP.UTF_8;  
  106.   
  107.     private long currentRequestExpiry = HttpCache.getDefaultExpiryTime();  
  108.   
  109.     private final static int DEFAULT_CONN_TIMEOUT = 1000 * 15// 15s  
  110.   
  111.     private final static int DEFAULT_RETRY_TIMES = 3;  
  112.   
  113.     private static final String HEADER_ACCEPT_ENCODING = "Accept-Encoding";  
  114.     private static final String ENCODING_GZIP = "gzip";  
  115.   
  116.     private final static int DEFAULT_POOL_SIZE = 3;  
  117.     private final static PriorityExecutor EXECUTOR = new PriorityExecutor(DEFAULT_POOL_SIZE);  
  118.   
  119.     public HttpClient getHttpClient() {  
  120.         return this.httpClient;  
  121.     }  
  122.   
  123.     // ***************************************** config *******************************************  
  124.   
  125.     /** 
  126.      * 配置请求文本编码,默认UTF-8 
  127.      * @param charSet 
  128.      * @return 
  129.      */  
  130.     public HttpUtils configResponseTextCharset(String charSet) {  
  131.         if (!TextUtils.isEmpty(charSet)) {  
  132.             this.responseTextCharset = charSet;  
  133.         }  
  134.         return this;  
  135.     }  
  136.   
  137.     /** 
  138.      * http重定向处理 
  139.      * @param httpRedirectHandler 
  140.      * @return 
  141.      */  
  142.     public HttpUtils configHttpRedirectHandler(HttpRedirectHandler httpRedirectHandler) {  
  143.         this.httpRedirectHandler = httpRedirectHandler;  
  144.         return this;  
  145.     }  
  146.   
  147.     /** 
  148.      * 配置http缓存大小 
  149.      * @param httpCacheSize 
  150.      * @return 
  151.      */  
  152.     public HttpUtils configHttpCacheSize(int httpCacheSize) {  
  153.         sHttpCache.setCacheSize(httpCacheSize);  
  154.         return this;  
  155.     }  
  156.   
  157.     /** 
  158.      * 配置默认http缓存失效 ,默认是60秒 
  159.      * @param defaultExpiry  
  160.      * @return 
  161.      */  
  162.     public HttpUtils configDefaultHttpCacheExpiry(long defaultExpiry) {  
  163.         HttpCache.setDefaultExpiryTime(defaultExpiry);  
  164.         currentRequestExpiry = HttpCache.getDefaultExpiryTime();  
  165.         return this;  
  166.     }  
  167.   
  168.     /** 
  169.      * 配置当前http缓存失效,时间默认60秒 
  170.      * @param currRequestExpiry 
  171.      * @return 
  172.      */  
  173.     public HttpUtils configCurrentHttpCacheExpiry(long currRequestExpiry) {  
  174.         this.currentRequestExpiry = currRequestExpiry;  
  175.         return this;  
  176.     }  
  177.   
  178.     /** 
  179.      * cookie存储配置 
  180.      * @param cookieStore 
  181.      * @return 
  182.      */  
  183.     public HttpUtils configCookieStore(CookieStore cookieStore) {  
  184.         httpContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);  
  185.         return this;  
  186.     }  
  187.   
  188.     /** 
  189.      * 配置浏览器信息包 
  190.      * @param userAgent 
  191.      * @return 
  192.      */  
  193.     public HttpUtils configUserAgent(String userAgent) {  
  194.         HttpProtocolParams.setUserAgent(this.httpClient.getParams(), userAgent);  
  195.         return this;  
  196.     }  
  197.   
  198.     /** 
  199.      * 配置时间链接超时 
  200.      * @param timeout 
  201.      * @return 
  202.      */  
  203.     public HttpUtils configTimeout(int timeout) {  
  204.         final HttpParams httpParams = this.httpClient.getParams();  
  205.         ConnManagerParams.setTimeout(httpParams, timeout);  
  206.         HttpConnectionParams.setConnectionTimeout(httpParams, timeout);  
  207.         return this;  
  208.     }  
  209.   
  210.     /** 
  211.      * 配置socket时间连接溢出 
  212.      * @param timeout 
  213.      * @return 
  214.      */  
  215.     public HttpUtils configSoTimeout(int timeout) {  
  216.         final HttpParams httpParams = this.httpClient.getParams();  
  217.         HttpConnectionParams.setSoTimeout(httpParams, timeout);  
  218.         return this;  
  219.     }  
  220.   
  221.     /** 
  222.      * 配置注册Scheme 
  223.      * @param scheme 
  224.      * @return 
  225.      */  
  226.     public HttpUtils configRegisterScheme(Scheme scheme) {  
  227.         this.httpClient.getConnectionManager().getSchemeRegistry().register(scheme);  
  228.         return this;  
  229.     }  
  230.   
  231.     /** 
  232.      * 配置SSLSocketFactory 
  233.      * @param sslSocketFactory 
  234.      * @return 
  235.      */  
  236.     public HttpUtils configSSLSocketFactory(SSLSocketFactory sslSocketFactory) {  
  237.         Scheme scheme = new Scheme("https", sslSocketFactory, 443);  
  238.         this.httpClient.getConnectionManager().getSchemeRegistry().register(scheme);  
  239.         return this;  
  240.     }  
  241.   
  242.     /** 
  243.      * 配置请求重试次数 
  244.      * @param count 重试次数 
  245.      * @return 
  246.      */  
  247.     public HttpUtils configRequestRetryCount(int count) {  
  248.         this.httpClient.setHttpRequestRetryHandler(new RetryHandler(count));  
  249.         return this;  
  250.     }  
  251.   
  252.     /** 
  253.      * 配置请求线程池个数 
  254.      * @param threadPoolSize 线程池个数 
  255.      * @return 
  256.      */  
  257.     public HttpUtils configRequestThreadPoolSize(int threadPoolSize) {  
  258.         HttpUtils.EXECUTOR.setPoolSize(threadPoolSize);  
  259.         return this;  
  260.     }  
  261.   
  262.     // ***************************************** send request 发送请求*******************************************  
  263.   
  264.     /** 
  265.      * 发送异步网络请求 -重要 
  266.      * @param method get或者post请求等等 
  267.      * @param url 网络请求路径 
  268.      * @param callBack 回调 
  269.      * @return 
  270.      */  
  271.     public <T> HttpHandler<T> send(HttpRequest.HttpMethod method, String url,  
  272.                                    RequestCallBack<T> callBack) {  
  273.         return send(method, url, null, callBack);  
  274.     }  
  275.   
  276.     /** 
  277.      * 发送异步网络请求 -重要 
  278.      * @param method get或者post请求等等 
  279.      * @param url 网络请求路径 
  280.      * @param params 请求参数 
  281.      * @param callBack 回调 
  282.      * @return 
  283.      */  
  284.     public <T> HttpHandler<T> send(HttpRequest.HttpMethod method, String url, RequestParams params,  
  285.                                    RequestCallBack<T> callBack) {  
  286.         if (url == nullthrow new IllegalArgumentException("url may not be null");  
  287.   
  288.         HttpRequest request = new HttpRequest(method, url);  
  289.         return sendRequest(request, params, callBack);  
  290.     }  
  291.   
  292.     /** 
  293.      * 发送同步网络请求 -用得不多 
  294.      * @param method get或者post等方法 
  295.      * @param url 联网网络url 
  296.      * @return 
  297.      * @throws HttpException 
  298.      */  
  299.     public ResponseStream sendSync(HttpRequest.HttpMethod method, String url) throws HttpException {  
  300.         return sendSync(method, url, null);  
  301.     }  
  302.   
  303.     /** 
  304.      * 发送同步网络请求 -用得不多 
  305.      * @param method get或者post等方法 
  306.      * @param url 联网网络url  
  307.      * @param params 请求参数 
  308.      * @return 
  309.      * @throws HttpException 
  310.      */  
  311.     public ResponseStream sendSync(HttpRequest.HttpMethod method, String url, RequestParams params) throws HttpException {  
  312.         if (url == nullthrow new IllegalArgumentException("url may not be null");  
  313.   
  314.         HttpRequest request = new HttpRequest(method, url);  
  315.         return sendSyncRequest(request, params);  
  316.     }  
  317.   
  318.     // ***************************************** download  下载*******************************************  
  319.   
  320.     /** 
  321.      * 下载文件方法 
  322.      * @param url 下载文件的url 
  323.      * @param target 下载保存的目录 
  324.      * @param callback 回调 
  325.      * @return 
  326.      */  
  327.     public HttpHandler<File> download(String url, String target,  
  328.                                       RequestCallBack<File> callback) {  
  329.         return download(HttpRequest.HttpMethod.GET, url, target, nullfalsefalse, callback);  
  330.     }  
  331.   
  332.     /** 
  333.      * 下载文件方法 
  334.      * @param url 下载文件的url 
  335.      * @param target 下载保存的目录 
  336.      * @param autoResume 是否自动恢复下载 
  337.      * @param callback 回调 
  338.      * @return 
  339.      */  
  340.     public HttpHandler<File> download(String url, String target,  
  341.                                       boolean autoResume, RequestCallBack<File> callback) {  
  342.         return download(HttpRequest.HttpMethod.GET, url, target, null, autoResume, false, callback);  
  343.     }  
  344.   
  345.     /** 
  346.      * 下载文件方法 
  347.      * @param url 下载文件的url 
  348.      * @param target 下载保存的目录 
  349.      * @param autoResume  是否自动恢复下载 
  350.      * @param autoRename 是否自动重命名 
  351.      * @param callback 回调 
  352.      * @return 
  353.      */  
  354.     public HttpHandler<File> download(String url, String target,  
  355.                                       boolean autoResume, boolean autoRename, RequestCallBack<File> callback) {  
  356.         return download(HttpRequest.HttpMethod.GET, url, target, null, autoResume, autoRename, callback);  
  357.     }  
  358.   
  359.     /** 
  360.      * 下载文件方法 
  361.      * @param url 下载文件的url 
  362.      * @param target 下载保存的目录 
  363.      * @param params 参数类 
  364.      * @param callback 回调 
  365.      * @return 
  366.      */  
  367.     public HttpHandler<File> download(String url, String target,  
  368.                                       RequestParams params, RequestCallBack<File> callback) {  
  369.         return download(HttpRequest.HttpMethod.GET, url, target, params, falsefalse, callback);  
  370.     }  
  371.   
  372.     /** 
  373.      * 下载文件方法 
  374.      * @param url  下载文件的url 
  375.      * @param target 下载保存的目录 
  376.      * @param params 参数类 
  377.      * @param autoResume 是否自动恢复下载 
  378.      * @param callback 回调 
  379.      * @return 
  380.      */  
  381.     public HttpHandler<File> download(String url, String target,  
  382.                                       RequestParams params, boolean autoResume, RequestCallBack<File> callback) {  
  383.         return download(HttpRequest.HttpMethod.GET, url, target, params, autoResume, false, callback);  
  384.     }  
  385.   
  386.     /** 
  387.      * 下载文件方法 
  388.      * @param url 下载文件的url 
  389.      * @param target 下载保存的目录 
  390.      * @param params 参数 
  391.      * @param autoResume 是否自动恢复 
  392.      * @param autoRename 是否自动命名 
  393.      * @param callback 回调 
  394.      * @return 
  395.      */  
  396.     public HttpHandler<File> download(String url, String target,  
  397.                                       RequestParams params, boolean autoResume, boolean autoRename, RequestCallBack<File> callback) {  
  398.         return download(HttpRequest.HttpMethod.GET, url, target, params, autoResume, autoRename, callback);  
  399.     }  
  400.   
  401.     /** 
  402.      * 下载文件方法 
  403.      * @param method 请求用get还是post等 
  404.      * @param url 下载文件的url 
  405.      * @param target 下载保存的目录 
  406.      * @param params 参数 
  407.      * @param callback 回调 
  408.      * @return 
  409.      */  
  410.     public HttpHandler<File> download(HttpRequest.HttpMethod method, String url, String target,  
  411.                                       RequestParams params, RequestCallBack<File> callback) {  
  412.         return download(method, url, target, params, falsefalse, callback);  
  413.     }  
  414.   
  415.     /** 
  416.      * 下载文件方法 
  417.      * @param method 请求用get还是post等 
  418.      * @param url 下载文件的url 
  419.      * @param target 下载保存的目录 
  420.      * @param params 参数 
  421.      * @param autoResume 是否自动恢复下载 
  422.      * @param callback 回调 
  423.      * @return 
  424.      */  
  425.     public HttpHandler<File> download(HttpRequest.HttpMethod method, String url, String target,  
  426.                                       RequestParams params, boolean autoResume, RequestCallBack<File> callback) {  
  427.         return download(method, url, target, params, autoResume, false, callback);  
  428.     }  
  429.   
  430.     /** 
  431.      * 下载文件方法 
  432.      * @param method 请求用get还是post等 
  433.      * @param url 下载文件的url 
  434.      * @param target 下载保存的目录 
  435.      * @param params 参数 
  436.      * @param autoResume 是否自动恢复下载 
  437.      * @param autoRename 是否自动重命名 
  438.      * @param callback 回调 
  439.      * @return 
  440.      */  
  441.     public HttpHandler<File> download(HttpRequest.HttpMethod method, String url, String target,  
  442.                                       RequestParams params, boolean autoResume, boolean autoRename, RequestCallBack<File> callback) {  
  443.   
  444.         if (url == nullthrow new IllegalArgumentException("url may not be null");  
  445.         if (target == nullthrow new IllegalArgumentException("target may not be null");  
  446.   
  447.         HttpRequest request = new HttpRequest(method, url);  
  448.   
  449.         HttpHandler<File> handler = new HttpHandler<File>(httpClient, httpContext, responseTextCharset, callback);  
  450.   
  451.         handler.setExpiry(currentRequestExpiry);  
  452.         handler.setHttpRedirectHandler(httpRedirectHandler);  
  453.   
  454.         if (params != null) {  
  455.             request.setRequestParams(params, handler);  
  456.             handler.setPriority(params.getPriority());  
  457.         }  
  458.         handler.executeOnExecutor(EXECUTOR, request, target, autoResume, autoRename);  
  459.         return handler;  
  460.     }  
  461.   
  462.     ////////////////////////////////////////////////////////////////////////////////////////////////  
  463.     private <T> HttpHandler<T> sendRequest(HttpRequest request, RequestParams params, RequestCallBack<T> callBack) {  
  464.   
  465.         HttpHandler<T> handler = new HttpHandler<T>(httpClient, httpContext, responseTextCharset, callBack);  
  466.   
  467.         handler.setExpiry(currentRequestExpiry);  
  468.         handler.setHttpRedirectHandler(httpRedirectHandler);  
  469.         request.setRequestParams(params, handler);  
  470.   
  471.         if (params != null) {  
  472.             handler.setPriority(params.getPriority());  
  473.         }  
  474.         handler.executeOnExecutor(EXECUTOR, request);  
  475.         return handler;  
  476.     }  
  477.   
  478.     private ResponseStream sendSyncRequest(HttpRequest request, RequestParams params) throws HttpException {  
  479.   
  480.         SyncHttpHandler handler = new SyncHttpHandler(httpClient, httpContext, responseTextCharset);  
  481.   
  482.         handler.setExpiry(currentRequestExpiry);  
  483.         handler.setHttpRedirectHandler(httpRedirectHandler);  
  484.         request.setRequestParams(params);  
  485.   
  486.         return handler.sendRequest(request);  
  487.     }  

0 0
原创粉丝点击