相关疑难解决方法(0)

使用Apache HttpClient进行抢占式基本身份验证4

是否有一种更简单的方法来设置http客户端以进行抢先式基本身份验证,而不是此处描述的内容?
在以前的版本(3.x)中,它曾经是一个简单的方法调用(例如httpClient.getParams().setAuthenticationPreemptive(true)).
我想避免的主要是将BasicHttpContext添加到我执行的每个方法.

java basic-authentication apache-commons-httpclient

48
推荐指数
6
解决办法
7万
查看次数

使用凭据提供程序时,Apache HttpClient 不发送身份验证标头

编辑:我已经尝试过评论中提供的解决方案,但它们不起作用。添加原始标头是可行的,但我试图避免这样做。

我面临着一个奇怪的情况。我有一个受基本身份验证保护的资源,我可以通过浏览器、Postman 和curl 轻松查询该资源。但在 Java 中,我无法查询它并收到 403 禁止错误。我按照下面的例子:

CredentialsProvider provider = new BasicCredentialsProvider();
UsernamePasswordCredentials credentials = new UsernamePasswordCredentials("username", "password");
provider.setCredentials(AuthScope.ANY, credentials);
CloseableHttpClient client = HttpClientBuilder.create().setDefaultCredentialsProvider(provider).build();

HttpResponse response = client.execute(new HttpGet("https://hostname.com/api/detail?query=xx"));
int statusCode = response.getStatusLine().getStatusCode();
System.out.println(statusCode);     // prints 403 forbidden
Run Code Online (Sandbox Code Playgroud)

当我检查调试器中的对象时,我注意到 HttpGet 对象的标头为空。也就是说,它没有传递带有“Basic asdflkhjWskjhakljhasdfkasdflkjh=”值的“Authorization”标头。

因此,我手动添加了具有正确值的标头并且它起作用了(状态 200 OK)。

有人可以帮我弄清楚为什么会发生这种情况以及如何使用 HttpClient API 设置正确的标头而不是手动添加标头?

这是我的依赖:

<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.3</version>
Run Code Online (Sandbox Code Playgroud)

java apache-httpclient-4.x

6
推荐指数
1
解决办法
5714
查看次数