我一直在查看摘要身份验证示例:
http://hc.apache.org/httpcomponents-client-4.3.x/examples.html
在我的场景中,有多个线程发出 HTTP 请求,并且每个线程都必须使用自己的一组凭据进行身份验证。此外,请考虑这个问题对于 Apache HTTP 客户端 4.3 及以后的版本可能非常具体,4.2 可能以不同的方式处理身份验证,尽管我自己没有检查过。也就是说,有一个实际的问题。
我只想使用一个客户端实例(类的静态成员,即线程安全)并为其提供一个连接管理器来支持多个并发请求。关键是每个请求都将提供不同的凭据,并且我没有看到为每个请求分配凭据的方法,因为在构建 http 客户端时设置了凭据提供程序。从上面的链接:
[...]
HttpHost targetHost = new HttpHost("localhost", 80, "http");
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(
new AuthScope(targetHost.getHostName(), targetHost.getPort()),
new UsernamePasswordCredentials("username", "password"));
CloseableHttpClient httpclient = HttpClients.custom()
.setDefaultCredentialsProvider(credsProvider).build();
[...]
检查:
http://hc.apache.org/httpcomponents-client-ga/tutorial/html/authentication.html#d5e600
第 4.4 节中的代码示例(寻求4.4. HTTP 身份验证和执行上下文)似乎是说 HttpClientContext 被赋予了身份验证缓存和凭据提供程序,然后被传递给 HTTP 请求。在它旁边执行请求,似乎客户端将在 HTTP 请求中获得主机过滤的凭据。换句话说:如果上下文(或缓存)具有当前 HTTP 请求的目标主机的有效凭据,他将使用它们。对我来说问题是不同的线程将对同一主机执行不同的请求。
有没有办法为每个 HTTP 请求提供自定义凭据?
在此先感谢您的时间!:)