【发布时间】:2015-08-19 14:10:25
【问题描述】:
我想要什么: 发送带有抢占式基本身份验证的 GET 请求。
请求看起来像这样:
<startURL>/app/process?job=doSomething¶m=value1,value2
而 startURL 始终是 https 链接,具体取决于环境。
看起来像这样: https://testABC.com https://prodABC.com
startURL 也被放置在不同环境的属性文件中。
我调查的内容: http://www.baeldung.com/httpclient-4-basic-authentication
http://www.java-tips.org/other-api-tips/httpclient/how-to-use-basic-authentication.html
http://hc.apache.org/httpcomponents-client-ga/tutorial/html/authentication.html
这一切都包含一个
HttpHost targetHost = new HttpHost("hostname", portnumber, "scheme");
这是我遇到的麻烦。此方法也是唯一允许您将方案指定为“https”的方法。 一个问题是,我不知道端口号。我认为(?)我可能只为默认端口指定 -1 以使其工作,但即使除此之外我也没有主机名,只有上面提到的 startURL。我真的不想每次都解析这个额外的内容,同时我也不想添加另一个属性,只是为了主机名。
我四处挖掘,发现了这个 sn-p,看起来正是我想要的:
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("http://foo.com/bar");
httpGet.addHeader(BasicScheme.authenticate(
new UsernamePasswordCredentials("user", "password"),
"UTF-8", false));
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity responseEntity = httpResponse.getEntity();
来自HTTP requests with basic authentication
它给出了完整的请求 URL 并简单地添加了基本标头,不需要指定任何端口。只是现在从版本 4.2 开始不推荐使用:
Deprecated. (4.2) Use ContextAwareAuthScheme.authenticate( Credentials, HttpRequest, org.apache.http.protocol.HttpContext)
我找不到此方法返回基本身份验证标头的单个示例。它还需要一个上下文作为参数,而上面 snipped 没有。我真的不知道应该如何使用它。
那么,我想具体了解什么:
我只想设置一个包含完整链接的请求,其中包含所有内容,例如:
https://testABC.com/app/process?job=doSomething¶m=value1,value2
并将其作为执行抢先式基本身份验证的请求的参数。
有什么方法可以做到这一点,而无需挖掘已弃用的方法以及它的外观如何?
【问题讨论】:
标签: java authentication basic-authentication apache-httpclient-4.x