skonfigurowaniu Authenticator przed wywołaniem OpenConnection() tak,
Authenticator.setDefault(new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password.toCharArray());
}
});
Ponieważ istnieje tylko jeden globalny domyślny uwierzytelnienia, to naprawdę nie działa dobrze, gdy masz wielu użytkowników robi się w UrlFetch wiele wątków. Chciałbym użyć Apache HttpClient, jeśli tak jest.
EDYCJA: Myliłem się. App Engine nie zezwala na Authenticator. Nawet jeśli jest to dozwolone, będziemy mieli problem z wieloma wątkami z globalną instancją uwierzytelniającą. Mimo że nie możesz tworzyć wątków, Twoje żądania mogą nadal być wyświetlane w różnych wątkach. Więc po prostu dodać nagłówek ręcznie przy użyciu tej funkcji,
import com.google.appengine.repackaged.com.google.common.util.Base64;
/**
* Preemptively set the Authorization header to use Basic Auth.
* @param connection The HTTP connection
* @param username Username
* @param password Password
*/
public static void setBasicAuth(HttpURLConnection connection,
String username, String password) {
StringBuilder buf = new StringBuilder(username);
buf.append(':');
buf.append(password);
byte[] bytes = null;
try {
bytes = buf.toString().getBytes("ISO-8859-1");
} catch (java.io.UnsupportedEncodingException uee) {
assert false;
}
String header = "Basic " + Base64.encode(bytes);
connection.setRequestProperty("Authorization", header);
}
Czy to naprawdę pytanie dotyczące App Engine? Wystarczy przejrzeć specyfikacje HTTP RFC, aby dowiedzieć się, jak wykonać podstawowe uwierzytelnianie (wskazówka - "autoryzacja"). –
Miałem nadzieję, że może istnieć opakowanie wygody dla App Engine podobne do Apache HttpClient, więc nie muszę ręcznie ustawiać nagłówka autoryzacji (i kodowania base64). – Thilo
Bardzo przydatna informacja –