setrequestproperty - java httpurlconnection authentication
¿Cómo manejar la autenticación HTTP usando HttpURLConnection? (2)
Estoy escribiendo un cliente Java que envía mensajes POST a un servidor HTTP que requiere autenticación .
Debo admitir al menos los siguientes tres métodos de autenticación: Básico, Resumen o Negociar. Además, el POST puede ser muy grande (más de 2 MB), así que necesito usar la transmisión. Como se documenta para HttpURLConnection
Cuando la transmisión de salida está habilitada, la autenticación y la redirección no pueden manejarse automáticamente. Se lanzará una HttpRetryException al leer la respuesta si se requiere autenticación o redirección.
Entonces, necesito manejar la autenticación yo mismo. Busqué y busqué de nuevo una forma de emplear las clases ya codificadas, pero no encontré la manera ...
Podría arrancar las fuentes necesarias desde here (ya que son GPLv2 con excepción de Classpath). ¿Es este el camino correcto?
Gracias.
Relacionado con el comentario de @ Mat:
Aquí hay un ejemplo usado por mi equipo y yo:
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()));
}
¡Espero eso ayude!
¿Necesita transmisión de salida? El HttpURLConnection
definitivamente admite autenticación con la clase Authenticator
, ver: Autenticación Http .
Actualización: en caso de que el Authenticator
no sea una opción, puede realizar manualmente la autenticación básica HTTP agregando un encabezado adicional a su solicitud HTTP. Pruebe el siguiente código (no probado):
String userPassword = username + ":" + password;
String encoding = new sun.misc.BASE64Encoder().encode(userPassword.getBytes());
URLConnection uc = url.openConnection();
uc.setRequestProperty("Authorization", "Basic " + encoding);
uc.connect();