組み込みの httpclient を使用して、認証が必要な外部サービスに「get」クエリを発行しています。具体的には、サービスから splunk にクエリを送信しようとしています。リクエストでユーザー資格情報を渡すにはどうすればよいですか? 認証トークンを処理する代わりに、基本認証を使用したいと考えています。
質問する
7728 次
1 に答える
17
基本認証は、Authorization ヘッダーがすべてです。
base64 でエンコードされた「basic」(空白に注意) と login:pass (コロンで区切られた) で構成される値を含むヘッダーを追加する必要があります。これは、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);
get の代わりに POST を使用する場合は、必要なヘッダーを追加することを忘れないでください。
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 に答える