5

組み込みの httpclient を使用して、認証が必要な外部サービスに「get」クエリを発行しています。具体的には、サービスから splunk にクエリを送信しようとしています。リクエストでユーザー資格情報を渡すにはどうすればよいですか? 認証トークンを処理する代わりに、基本認証を使用したいと考えています。

4

1 に答える 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 に答える