Jak obsługiwać uwierzytelnianie HTTP za pomocą HttpURLConnection?


Piszę klienta Java, który POST wysyła do serwera HTTP, który wymaga

poświadczenie

.

Muszę obsługiwać co najmniej następujące trzy metody uwierzytelniania: podstawowe, szyfrowane lub negocjacyjne. Ponadto POST może być bardzo duży (ponad 2 MB), więc muszę użyć przesyłania strumieniowego.
Jak udokumentowano dla

HttpURLConnection
http://download.oracle.com/jav ... gMode(int)Gdy wyjście strumieniowe jest włączone, uwierzytelnianie i przekierowanie nie mogą być obsługiwane automatycznie. Jeśli wymagane jest uwierzytelnianie lub przekierowanie, podczas odczytywania odpowiedzi zostanie zgłoszony HttpRetryException.

Więc muszę sam zająć się uwierzytelnianiem. Szukałem i szukałem ponownie sposobu wykorzystania już zakodowanych klas - ale nie mogłem znaleźć żadnego sposobu ...
Mogę po prostu pobrać niezbędne źródła stąd (ponieważ są to GPLv2 z wyjątkiem Classpath). Czy to dobra droga?
Podziękować.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Czy potrzebujesz wyjścia strumieniowego?
HttpURLConnection
zdecydowanie obsługuje uwierzytelnianie za pomocą klasy
Authenticator
, zobacz:

Http Authentication
http://docs.oracle.com/javase/ ... .html
.

Update:

w przypadku, gdy opcja
Authenticator
nie jest dostępna, możesz ręcznie wykonać podstawowe uwierzytelnianie HTTP, dodając dodatkowy nagłówek do żądania HTTP. Wypróbuj następujący kod (nieprzetestowany):
String userPassword = username + ":" + password;
String encoding = new sun.misc.BASE64Encoder().encode(userPassword.getBytes());
URLConnection uc = url.openConnection();
uc.setRequestProperty("Authorization", "Basic " + encoding);
uc.connect();
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Powiązane z komentarzem @ Mat:
Oto przykład używany przez mój zespół i mnie:
import org.apache.commons.codec.binary.Base64;HttpGet getRequest = new HttpGet(endpoint);
getRequest.addHeader("Authorization", "Basic " + getBasicAuthenticationEncoding());private String getBasicAuthenticationEncoding() { String userPassword = username + ":" + password;
return new String(Base64.encodeBase64(userPassword.getBytes()));
}

Mam nadzieję że to pomoże!

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się