gpt4 book ai didi

http - 每个请求的 Apache HTTP 客户端 4.3 凭据

转载 作者:可可西里 更新时间:2023-11-01 15:10:07 28 4
gpt4 key购买 nike

我一直在查看摘要式身份验证示例:

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 被赋予 auth 缓存和凭证提供程序,然后传递给 HTTP 请求.在它旁边执行请求,并且客户端似乎将在 HTTP 请求中获得主机过滤的凭据。换句话说:如果上下文(或缓存)具有当前 HTTP 请求的目标主机的有效凭据,他将使用它们。我的问题是不同的线程将对同一主机执行不同的请求。

有什么方法可以为每个 HTTP 请求提供自定义凭据吗?

提前感谢您的宝贵时间! :)

最佳答案

The problem for me is that different threads will perform different requests to the same host.

为什么这是个问题?只要每个线程使用不同的 HttpContext 实例,这些线程的执行上下文将是完全独立的

CloseableHttpClient httpclient = HttpClients.createDefault();
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("user:pass"));
HttpClientContext localContext = HttpClientContext.create();
localContext.setCredentialsProvider(credentialsProvider);

HttpGet httpget = new HttpGet("http://localhost/");

CloseableHttpResponse response = httpclient.execute(httpget, localContext);
try {
EntityUtils.consume(response.getEntity());
} finally {
response.close();
}

关于http - 每个请求的 Apache HTTP 客户端 4.3 凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19252946/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com