Java ApacheHTTP4.x:;“默认上下文”;无法在HttpClient上配置

Java ApacheHTTP4.x:;“默认上下文”;无法在HttpClient上配置,java,apache-httpclient-4.x,Java,Apache Httpclient 4.x,在Apache HTTP客户端(4.x,commons HTTP 3.x的继承者)中,在HttpClient上,方法: HttpClient.execute(HttpUriRequest request) JavaDocs中的状态: “使用默认上下文执行请求。” 默认上下文是什么(指HttpContext对象) 如何配置默认上下文,以便在每次调用execute()时不需要传递它?(我不控制对execute()的调用,但我控制创建HttpClient) 默认上下文由您正在使用的HttpCli

在Apache HTTP客户端(4.x,commons HTTP 3.x的继承者)中,在
HttpClient
上,方法:

HttpClient.execute(HttpUriRequest request) 
JavaDocs中的状态:

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

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

默认上下文由您正在使用的
HttpClient
实现配置。对于基于
AbstractHttpClient
的实现,工作由
createHttpContext()
方法完成。请注意,将为每个
execute
调用创建一个新的默认上下文

自己配置默认上下文的一种方法是扩展一个现有的
HttpClient
实现类并重写该方法

另一种方法是设置方法使用的各种参数;e、 g.连接管理器的方案注册表、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;
}

通过查看创建默认
HttpContext
的源代码,您可以通过在
HttpClient
实例上设置属性来控制创建时使用的值,例如调用
setCredentialsProvider(CredentialsProvider credsProvider)
。是否有任何特定属性需要配置?

我正在尝试默认身份验证缓存,以便所有请求预先授权基本身份验证头(因为这是一个仅通过https连接到已知服务器的REST客户端):localcontext.setAttribute(ClientContext.AUTH\u缓存,authCache);如果不正确设置自己的默认上下文,我看不到任何方法可以做到这一点?你是对的,我看不到任何其他方法可以满足你的需要@Stephen C建议对现有的
HttpClient
实现进行子类化,这将是当前API的唯一方法。