Si imposta un Authenticator prima di chiamare OpenConnection() in questo modo,
Authenticator.setDefault(new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password.toCharArray());
}
});
Poiché v'è un solo autenticatore predefinita globale, questo non funziona davvero bene quando si dispone di più utenti che fanno l'URLFetch in più thread. Vorrei usare Apache HttpClient se questo è il caso.
EDIT: Ho sbagliato. App Engine non consente l'autenticazione. Anche se consentito, avremmo il problema multi-thread con un'istanza di autenticazione globale. Anche se non puoi creare discussioni, le tue richieste potrebbero comunque essere pubblicate in thread diversi. Così abbiamo appena aggiungere l'intestazione manualmente utilizzando questa funzione,
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);
}
fonte
2009-08-30 00:15:46
Questa è davvero una domanda di App Engine, quindi? Basta cercare gli RFC HTTP per vedere come eseguire l'autenticazione di base (suggerimento - 'Autorizzazione'). –
Speravo che potesse esserci un wrapper di convenienza per App Engine simile a Apache HttpClient in modo da non dover impostare manualmente (e codifica in base64) l'intestazione Autorizzazione. – Thilo
informazioni molto utili –