5
我使用內置的httpclient向需要身份驗證的外部服務發出「get」查詢。更具體地說,我試圖從我的服務提交查詢splunk。如何在請求中傳遞用戶憑據?我想使用基本身份驗證,而不是處理身份驗證令牌。http基本身份驗證與vert.x
我使用內置的httpclient向需要身份驗證的外部服務發出「get」查詢。更具體地說,我試圖從我的服務提交查詢splunk。如何在請求中傳遞用戶憑據?我想使用基本身份驗證,而不是處理身份驗證令牌。http基本身份驗證與vert.x
基本身份驗證都是關於授權標頭的。
你應該添加一個由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
httpclient是一個Jakarta框架,還有一些其他的被稱爲相同的東西。內置支持URLConnection。你什麼意思? – 2013-04-23 18:52:03
我指的是在vert.x中構建的httpclinet,它被實例化爲: HttpClient httpClient = vertx.createHttpClient(); – user2312682 2013-04-23 18:53:47