【发布时间】:2017-12-31 15:51:08
【问题描述】:
我需要访问一个像这样工作的 API:
curl https://api.com/ratings/v1/ -u [your token here]:
令牌是应该传递给HttpGet 请求的用户名。我正在尝试使用 java 以下列方式做同样的事情:
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("usrname", "passwrd"));
HttpHost proxy = new HttpHost("proxy.com", 8080, "http");
HttpClient httpClient = HttpClients.custom().setProxy(proxy).setDefaultCredentialsProvider(credentialsProvider).build();
HttpGet toesGet = new HttpGet("https://api.com/ratings/v1/");
toesGet.setHeader("Accept", "Application/Json");
toesGet.addHeader("Username", "[your token here]");
try {
HttpResponse toes = httpClient.execute(toesGet);
System.out.println(toes.getStatusLine());
System.out.println(toes.getEntity().toString());
} catch (Exception e) {
e.printStackTrace();
}
我是后台代理,因此我正在创建一个带有代理详细信息的HttpHost,为HttpClient 对象设置代理,并在以下代码行中使用credentialsProvider 传递代理身份验证凭据:
HttpHost proxy = new HttpHost("proxy.com", 8080, "http");
HttpClient httpClient = HttpClients.custom().setProxy(proxy).setDefaultCredentialsProvider(credentialsProvider).build();
我通过像这样添加header 将username 传递给HttpGet:
toesGet.addHeader("Username", "[your token here]");
当我运行代码时,我得到这个响应:HTTP/1.1 401 UNAUTHORIZED
这表明我没有以正确的方式将username 传递给HttpGet 请求(或者这是否意味着别的?)。那么将用户名传递给get请求的正确方法是什么?
任何帮助将不胜感激,谢谢!
注意:我在credentialsProvider中设置的usrname和passwrd是用于代理认证的。它们与 HttpGet 请求本身无关。我需要传递的令牌与凭据中提供的usrname 不同。
【问题讨论】:
-
调用
setDefaultCredentialsProvider就足够了,假设您的用户名和密码正确。据我所知,Username根本不是一个有效的标头,所以它可能什么也没做。 -
感谢您的评论。我在
credentialsProvider中设置的username和password用于代理认证。它们与 HttpGet 请求本身无关。 @VGR
标签: java http http-headers http-get