在Apache HTTP Client(4.x,commons http 3.x的后续版本)中,HttpClient
方法:
HttpClient.execute(HttpUriRequest request)
JavaDocs中的状态:
“使用默认上下文执行请求。”
HttpContext
个对象)? execute()
时都不需要传递它? (我不控制对execute()的调用,但我控制创建HttpClient)答案 0 :(得分:5)
默认上下文由您正在使用的HttpClient
实现配置。对于基于AbstractHttpClient
的实现,工作由createHttpContext()
方法完成。请注意,为每个execute
调用创建了一个新的默认上下文。
自己配置默认上下文的一种方法是扩展现有的HttpClient
实现类之一并覆盖该方法。
另一种方法是设置方法使用的各种参数;例如连接管理器的方案注册表,authScheme注册表,cookieSpecs注册表,cookie存储区或凭证提供程序。
为了记录,这里是DefaultHttpClient.createHttpContext()
的作用:
@Override
protected HttpContext createHttpContext() {
HttpContext context = new BasicHttpContext();
context.setAttribute(
ClientContext.SCHEME_REGISTRY,
getConnectionManager().getSchemeRegistry());
context.setAttribute(
ClientContext.AUTHSCHEME_REGISTRY,
getAuthSchemes());
context.setAttribute(
ClientContext.COOKIESPEC_REGISTRY,
getCookieSpecs());
context.setAttribute(
ClientContext.COOKIE_STORE,
getCookieStore());
context.setAttribute(
ClientContext.CREDS_PROVIDER,
getCredentialsProvider());
return context;
}
答案 1 :(得分:1)
通过查看创建默认HttpContext
的{{3}}的源代码,您可以通过调用HttpClient
实例上的属性来控制创建它的值,方法是调用{例如{1}}。您是否要配置任何特定属性?