4

在 Apache HTTP Client(4.x,commons http 3.x 的继承者)中,关于HttpClient方法:

HttpClient.execute(HttpUriRequest request) 

JavaDocs 中的状态:

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

  • 什么是默认上下文(引用一个HttpContext对象)?
  • 如何配置默认上下文,这样我就不需要在每次调用时将其传递给execute()?(我不控制对 execute() 的调用,但我控制创建 HttpClient)
4

2 回答 2

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;
}
于 2011-05-23T13:10:52.127 回答
1

通过查看AbstractHttpClient创建 default的源代码,您可以通过调用实例HttpContext来控制通过在实例上设置属性来创建它的值。您是否要配置任何特定的属性?HttpClientsetCredentialsProvider(CredentialsProvider credsProvider)

于 2011-05-23T13:15:25.283 回答