【发布时间】:2018-12-10 23:41:52
【问题描述】:
编辑:我已经尝试了 cmets 中提供的解决方案,但它们不起作用。添加原始标题有效,但我试图避免这样做。
我正面临一个奇怪的情况。我有一个受基本身份验证保护的资源,我可以通过浏览器、邮递员和 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
当我在调试器中检查对象时,我注意到 HttpGet 对象的标头是空的。也就是说,它没有传递带有“基本 asdflkhjWskjhakljhasdfkasdflkjh =”值的“授权”标头。
所以我手动添加了具有正确值的标头并且它起作用了(状态 200 OK)。
谁能帮我弄清楚为什么会发生这种情况以及如何使用 HttpClient API 来设置正确的标头而不是手动添加标头?
这是我的依赖:
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.3</version>
【问题讨论】:
-
看起来有很好的例子here
-
这正是我从@Jamie_D 复制上述 sn-p 的地方。
-
用 Raw Headers 方法试试。
-
按照此处hc.apache.org/httpcomponents-client-4.5.x/logging.html 的描述生成会话的连线/上下文日志并将其添加到问题
标签: java apache-httpclient-4.x