2013-04-23 165 views
5

我使用內置的httpclient向需要身份驗證的外部服務發出「get」查詢。更具體地說,我試圖從我的服務提交查詢splunk。如何在請求中傳遞用戶憑據?我想使用基本身份驗證,而不是處理身份驗證令牌。http基本身份驗證與vert.x

+0

httpclient是一個Jakarta框架,還有一些其他的被稱爲相同的東西。內置支持URLConnection。你什麼意思? – 2013-04-23 18:52:03

+0

我指的是在vert.x中構建的httpclinet,它被實例化爲: HttpClient httpClient = vertx.createHttpClient(); – user2312682 2013-04-23 18:53:47

回答

15

基本身份驗證都是關於授權標頭的。

你應該添加一個由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); 

如果使用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); 

我希望它有助於

Hugo