httpclient -- InternalHttpClient解析
来源:互联网 发布:纹身贴纸淘宝 编辑:程序博客网 时间:2024/06/08 03:26
1.doExecute(final HttpHost target,
主要步骤:
1.
final HttpRequestWrapper wrapper = HttpRequestWrapper.wrap(request, target);
将request和target进行封装。
2.
final HttpClientContext localcontext = HttpClientContext.adapt( context != null ? context : new BasicHttpContext());
判断参数context是否为空,如果为空,那么就新建一个httpclientContext。
3.
RequestConfig config = null; if (request instanceof Configurable) { config = ((Configurable) request).getConfig(); } if (config == null) { final HttpParams params = request.getParams(); if (params instanceof HttpParamsNames) { if (!((HttpParamsNames) params).getNames().isEmpty()) { config = HttpClientParamConfig.getRequestConfig(params, this.defaultConfig); } } else { config = HttpClientParamConfig.getRequestConfig(params, this.defaultConfig); } }
判断request中是否有设置了config(比如连接时间限制等等),如果人工设置了,将其抽出,同时为了和旧版本兼容,也会检查request是否设置了params,如果有的话,就将它转成config,并抽出,如果仍然没有,那么InternalHttpClient就会用其final域中的defaultConfig的替代。
4.
if (config != null) { localcontext.setRequestConfig(config); }
之后,就将config信息存储到localcontext中
5.
setupContext(localcontext);
设置localcontext的相关参数。setupContext的相关代码如下
private void setupContext(final HttpClientContext context) { if (context.getAttribute(HttpClientContext.TARGET_AUTH_STATE) == null) { context.setAttribute(HttpClientContext.TARGET_AUTH_STATE, new AuthState()); } if (context.getAttribute(HttpClientContext.PROXY_AUTH_STATE) == null) { context.setAttribute(HttpClientContext.PROXY_AUTH_STATE, new AuthState()); } if (context.getAttribute(HttpClientContext.AUTHSCHEME_REGISTRY) == null) { context.setAttribute(HttpClientContext.AUTHSCHEME_REGISTRY, this.authSchemeRegistry); } if (context.getAttribute(HttpClientContext.COOKIESPEC_REGISTRY) == null) { context.setAttribute(HttpClientContext.COOKIESPEC_REGISTRY, this.cookieSpecRegistry); } if (context.getAttribute(HttpClientContext.COOKIE_STORE) == null) { context.setAttribute(HttpClientContext.COOKIE_STORE, this.cookieStore); } if (context.getAttribute(HttpClientContext.CREDS_PROVIDER) == null) { context.setAttribute(HttpClientContext.CREDS_PROVIDER, this.credentialsProvider); } if (context.getAttribute(HttpClientContext.REQUEST_CONFIG) == null) { context.setAttribute(HttpClientContext.REQUEST_CONFIG, this.defaultConfig); } }
6.
final HttpRoute route = determineRoute(target, wrapper, localcontext);
确定路由。
7.
this.execChain.execute(route, wrapper, localcontext, execAware);
调用execChain的execute方法。
阅读全文
0 0
- httpclient -- InternalHttpClient解析
- Httpclient解析
- HttpClient 解析 jsonArray数据
- httpclient解析https网页
- httpClient(Get)解析JSON
- HttpClient解析数据
- org.apache.commons.httpclient.HttpClient;解析xml
- httpClient获取Jsoup解析网页
- Android HttpClient 与JSON解析
- httpClient获取Jsoup解析网页
- Android-Async-HttpClient 源码解析
- HttpClient请求网络 xml解析
- HttpClient获取并解析JSON数据
- 互联网通信-HttpClient、XML解析(W3C)
- Android:互联网通信-HttpClient、XML解析
- Windows Phone HttpClient解析gb2312网页
- Android HttpClient获取JSON数据并解析
- httpclient解析网页,htmlparser获取制定元素
- Android.mk学习
- 选择排序
- delphi数据类型
- linux下 如何切换到root用户
- 查看apk的签名信息
- httpclient -- InternalHttpClient解析
- 将博客搬至CSDN
- 天通苑海鲜餐馆数据调查,很难想象消费越贵越受欢迎
- Robot Framework 的安装配置和简单的实例介绍
- 二维码扫描
- 总结linux清理垃圾命令
- bootstrap固定table表头
- 数据科学:以信息为载体的精确体系
- 语义分割-- SegNet:A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation