Android-Async-httpClient 开源代码分析

来源:互联网 发布:无法连接所有网络驱动 编辑:程序博客网 时间:2024/06/04 18:47

一,AysncHttpClient 类:

Android-Async-httpClient核心类,包括在构造方法中初始化DefaultHttpClient的参数属性等,包括设置请求拦截器和响应拦截器,设置重试handler。

1,线程池。

AysncHttpClient利用线程池来管理请求线程,通过调调用Executors.newCachedThreadPool()来创建线程池,该线程池会根据需要来创建线程,如果构造的线程可用时候会重用他们,如果现有线程没有可用的,则创建新的线程并加入到线程池,会终止并移除那些已经有60秒没有被使用的线程。

2,请求拦截器,响应拦截器。

在构造方法中设置了HttpClient请求拦截器和响应拦截器,在请求拦截器中处理了请求头Header参数和认证。响应拦截器中处理压缩文件的处理,response.setEntity(new InflatingEntity(entity));设置GZIPInputStream。

3,请求重试机制。

httpClient.setHttpRequestRetryHandler(new RetryHandler(DEFAULT_MAX_RETRIES, DEFAULT_RETRY_SLEEP_TIME_MILLIS));通过设置请求重试handler实现了5次的重试和1.5秒的延迟重试时间。

RetryHandler定义了那些异常需要重试那些异常则不需要重试。对于:NoHttpResponseException,UnknownHostException,SocketException异常需要重试;InterruptedIOException,SSLException则不需要重试。

4,支持重定向。

通过调用httpClient.getParams().setBooleanParameter(ClientPNames.ALLOW_CIRCULAR_REDIRECTS, enableCircularRedirects),支持环形重定向,即支持重定向之前重复的地址。

5,发送请求。

调用sendRequest()方法,每次请求都会新建一个请求线程AsyncHttpRequest,并启动此线程。然后新建一个请求手柄RequestHandle,该请求手柄含有AsyncHttpRequest的引用,用来管理AsyncHttpRequest,包括取消请求任务cancel和清除任务,每个RequestHandle都会保存在List中,该List又保存在Map中,键值对context-List。

二,MyRedirectHandler类:

重定向Handler类,继承自DefaultRedirectHandler,当需要重定向时候,则重定向。

1,重写isRedirectRequested方法,当服务器返回301,302,303,307时isRedirectRequested方法返回true,其他返回false。

2,重写getLocationURI方法,返回重定向的uri,从Header中获取重定向的地址,

Header locationHeader = response.getFirstHeader("location");

String location = locationHeader.getValue().replaceAll(" ", "%20");

      注意:当重定向地址和前一个请求地址相同时,需要设置环形重定向,否则会报CircularRedirectException,如:

                httpClient.getParams().setBooleanParameter(ClientPNames.ALLOW_CIRCULAR_REDIRECTS, true);  

运用:httpClient.setRedirectHandler(new MyRedirectHandler(enableRedirects));

三,MySSLSocketFactory类:

SSL安全套接字工厂类,继承自SSLSocketFactory,用于https加密请求。

本文引用文章:

HttpClient的CircularRedirectException异常原因及解决办法

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 换异地车牌了etc怎么办 被执行人拘留15天后不还钱怎么办 被执行人拘留后还是不还钱怎么办 摩托车套牌被交警扣了怎么办 套牌摩托车遇到交警怎么办 不知情收到小偷东西了怎么办 盗窃罪法院判定农民赔钱没钱怎么办 公安局通知家属取刑拘通知书怎么办 老公诈骗坐牢家人该怎么办 家人被拘留我该怎么办 车牌被偷了一个怎么办 车牌给人家偷了怎么办 收购了偷来的铝怎么办 员工自动离职后档案怎么办 辞职了老板不发工资怎么办 上班老板不发工资怎么办 逮捕后延长羁押期限怎么办手续 员工提出辞职公司不同意怎么办 员工提出辞职后即不来上班怎么办 打架把对方打成轻伤害怎么办 被刑拘了家人该怎么办 看守所在押人员检查出乙肝怎么办 孩子不写作业老师该怎么办 孩子老师向我表白该怎么办 幼儿园老师打孩子家长该怎么办 老师对孩子太苛刻该怎么办 孩子不敢上学怕老师该怎么办 学生上课迟到老师该怎么办 看守所转监狱不收怎么办 己判实刑有病看守所不收怎么办 判决书生效前看守所不收怎么办 法院判实刑看守所不收怎么办 派出所立案后送拘留所了怎么办 打架斗殴被关在看守所了怎么办 在看守所羁押期间患癌症怎么办 无法偿还借款拘留15天后怎么办 离婚起诉被告人被羁押怎么办 事实不清的案件怎么办 交通事故没时间去做笔录怎么办 偷东西被拘留家长该怎么办 在香港被拘留了怎么办