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