Używam wbudowany httpclient do wydania kwerendy "get" do usługi zewnętrznej, która wymaga uwierzytelnienia. Dokładniej, próbuję przesłać zapytania z mojej usługi. Jak przekazać dane uwierzytelniające użytkownika w żądaniu? Chcę używać podstawowego uwierzytelniania zamiast zajmować się tokenami uwierzytelniania.http podstawowy auth z vert.x
5
A
Odpowiedz
15
Podstawowy auth dotyczy nagłówka autoryzacji.
Powinieneś dodać ten nagłówek z wartością złożoną z "basic" (uwaga na puste) i twój login: pass (oddzielony dwukropkiem) zakodowany w base64. Jest to bezpieczne tylko w przypadku korzystania z HTTPS.
Oto jak się to odbywa w 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);
Tutaj mam już base64key, ale gdybym miał go utworzyć, chciałbym użyć czegoś takiego:
base64key = Base64.encodeBytes(new StringBuilder(apiKey).append(":").append(secretKey).toString().getBytes(), Base64.DONT_BREAK_LINES);
Jeśli używasz POST zamiast GET, nie zapomnij dodać wymagane nagłówki:
clientRequest.putHeader(HttpHeaders.Names.CONTENT_LENGTH, String.valueOf(params.getBytes().length))
.putHeader(HttpHeaders.Names.CONTENT_TYPE, "application/x-www-form-urlencoded")
.write(params);
mam nadzieję, że pomoże
Hugo
httpclient to framework Dżakarta i istnieje kilka innych nazywa to samo. Jest wbudowana obsługa połączenia URLConnection. Co masz na myśli? –
Mam na myśli wbudowany httpclinet w vert.x, który jest tworzony przez: HttpClient httpClient = vertx.createHttpClient(); – user2312682