Apache HTTP 4.x:如何在HttpClient上配置“默认上下文”

时间:2011-05-23 12:34:01

标签: java apache-httpclient-4.x

在Apache HTTP Client(4.x,commons http 3.x的后续版本)中,HttpClient方法:

HttpClient.execute(HttpUriRequest request) 

JavaDocs中的状态:

  

“使用默认上下文执行请求。”

  • 什么是默认上下文(指HttpContext个对象)?
  • 如何配置默认上下文,以便每次调用execute()时都不需要传递它? (我不控制对execute()的调用,但我控制创建HttpClient)

2 个答案:

答案 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}}。您是否要配置任何特定属性?