configura un autenticador antes de llamar openConnection() como este,
Authenticator.setDefault(new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password.toCharArray());
}
});
Dado que sólo hay un autenticador predeterminado global, esto en realidad no funcionan bien cuando hay varios usuarios que realizan el URLFetch en múltiples hilos. Usaría Apache HttpClient si ese es el caso.
EDIT: Estaba equivocado. App Engine no permite el Authenticator. Incluso si está permitido, tendríamos el problema de múltiples hilos con una instancia de autenticación global. Aunque no puede crear subprocesos, es posible que sus solicitudes se publiquen en diferentes subprocesos. Por lo que sólo tiene que añadir la cabecera de forma manual utilizando esta función,
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);
}
¿Es esto realmente una pregunta de App Engine? Simplemente busque los RFC de HTTP para ver cómo hacer la autenticación básica (sugerencia - 'Autorización'). –
Esperaba que pudiera haber un contenedor de conveniencia para App Engine similar a Apache HttpClient para que no tenga que establecer (y codificar base64) el encabezado Authorization manualmente. – Thilo
información muy útil –