xUtils 中的HttpUtils源码解释

来源:互联网 发布:json用什么解析 编辑:程序博客网 时间:2024/06/05 05:21
  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.     }  
  488. }  
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 一个身份证注册了两个支付宝怎么办 买手办拆了发现坏了怎么办 六个月宝宝喝贝因美过敏怎么办 超市盘点少的货扣员工工资怎么办 孩子东西在学校被偷了怎么办 想退出却不舍的感情不知怎么办? 我被老板摸全身失眠有阴影怎么办 不知道绑定支付宝的微博账号怎么办 银行卡丢了补办后支付宝账户怎么办 未激活的银行卡被锁定了怎么办 手机网银上的钱被盗走了怎么办 支付宝支付失败银行卡扣了钱怎么办 小程序的二次验证码丢失怎么办 苹果手机不小心购买游戏币怎么办 在淘宝买的洗衣粉是假的怎么办 京东快递电话填错了怎么办 新买的手机卡被注册过支付宝怎么办 手机卡掉了别人登陆支付宝怎么办 手机卡注销了支付宝欠的钱怎么办 手机丢了支付宝和微信里的钱怎么办 新办的手机号已被注册支付宝怎么办 新办的移动卡不能注册支付宝怎么办 新办的宝卡支付宝注册过怎么办 办支付宝后银行卡被盗刷怎么办 微信扫二维码送平衡群发了怎么办车 拼多多没收到货点了确认收货怎么办 拼多多收货地址填错了怎么办 京东订单申请退款已发货怎么办 手机播放声音的地方进水了怎么办 手机出声音的地方进水了怎么办 手机听声音的地方进水了怎么办 装修公司我只要基装她不肯怎么办 雄迈未来家庭忘记账号和密码怎么办 地方文件和国家政策有冲突怎么办? 网上贷款放款成功没有到账怎么办 我来贷放款中不到账怎么办 手持身份证被别人网贷了怎么办 身份证被别人做了网贷怎么办 身份证丢了被别人网贷了怎么办 户口身份证被注销了网贷怎么办 首付交了贷款办不下来怎么办