我正在使用内置的 httpclient 向需要身份验证的外部服务发出“get”查询。更具体地说,我正在尝试从我的服务中提交查询到 splunk。如何在请求中传递用户凭据?我想使用基本身份验证而不是处理身份验证令牌。
问问题
7728 次
1 回答
17
基本身份验证是关于授权标头的。
您应该在该标头中添加一个由“basic”(注意空白)和您的 login:pass(用冒号分隔)组成的值,以 base64 编码。仅当您使用 HTTPS 时,这才是安全的。
这是我在 vert.x 中完成此操作的方法:
HttpClient client = vertx.createHttpClient().setSSL(true)
.setTrustAll(true) //You may not want to trust them all
.setHost("api.myawesomeapi.com")
.setPort(443);
HttpClientRequest clientRequest = client.get("/"+action+"/?"+params, new Handler<HttpClientResponse>() {
public void handle(final HttpClientResponse response) {
if (response.statusCode==200){
// It worked !
} else {
// Oops
}
}
});
clientRequest.putHeader(HttpHeaders.Names.AUTHORIZATION, "Basic "+base64key);
这里我已经有了base64key,但如果我必须创建它,我会使用类似的东西:
base64key = Base64.encodeBytes(new StringBuilder(apiKey).append(":").append(secretKey).toString().getBytes(), Base64.DONT_BREAK_LINES);
如果您使用 POST 而不是 get,请不要忘记添加所需的标题:
clientRequest.putHeader(HttpHeaders.Names.CONTENT_LENGTH, String.valueOf(params.getBytes().length))
.putHeader(HttpHeaders.Names.CONTENT_TYPE, "application/x-www-form-urlencoded")
.write(params);
我希望它有帮助
雨果
于 2013-04-27T10:31:11.793 回答