¿Cómo me conecto a una URL remota en Java que requiere autenticación? Estoy tratando de encontrar una manera de modificar el siguiente código para poder proporcionar programáticamente un nombre de usuario / contraseña para que no arroje un 401.
URL url = new URL(String.format("http://%s/manager/list", _host + ":8080"));
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
java
httpurlconnection
usuario14128
fuente
fuente
Respuestas:
Puede configurar el autenticador predeterminado para solicitudes http como este:
Además, si necesita más flexibilidad, puede consultar el HttpClient de Apache , que le dará más opciones de autenticación (así como soporte de sesión, etc.)
fuente
Authenticator
unaURL.openConnection()
invocación específica por específica en lugar de establecerla globalmente?HttpURLConnection.setAuthenticator()
. Desafortunadamente en Java 8 y versiones anteriores, la instancia de Authenticator es una variable global de JVM. Ver: docs.oracle.com/javase/9/docs/api/java/net/…Hay una alternativa nativa y menos intrusiva, que funciona solo para su llamada.
fuente
.trim()
el resultado, o llame a una variante de método que no produce una salida fragmentada.javax.xml.bind.DatatypeConverter
Parece más seguroTambién puede usar lo siguiente, que no requiere el uso de paquetes externos:
fuente
--add-modules javax.xml.bind
ya que eliminaron el paquete de la ruta de clase predeterminada. Y en Java11 + se elimina por completo, necesita una dependencia externa nuevamente. ¡Tal es el progreso!java.util.Base64
ahora, así que es un verdadero progreso :)Si está utilizando el inicio de sesión normal mientras ingresa el nombre de usuario y la contraseña entre el protocolo y el dominio, esto es más simple. También funciona con y sin inicio de sesión.
Ejemplo de URL: http: // usuario: [email protected]/url
Tenga en cuenta en el comentario, de valerybodak, a continuación cómo se hace en un entorno de desarrollo de Android.
fuente
url.getUserInfo()
pasaríasURLDecoder.decode()
primero (@Peter Rader).Como vine aquí buscando un Android-Java-Answer voy a hacer un breve resumen:
Si desea utilizar java.net.URLConnection con autenticación básica en Android, pruebe este código:
fuente
Pude configurar la autenticación usando HttpsURLConnection
Algunos de los cambios obtenidos de esta publicación. y Base64 es del paquete java.util.
fuente
Tenga mucho cuidado con el enfoque "Base64 (). Encode ()", mi equipo y yo recibimos 400 problemas de solicitud incorrecta de Apache porque agrega un \ r \ n al final de la cadena generada.
Lo encontramos oliendo paquetes gracias a Wireshark.
Aquí está nuestra solución:
¡Espero eso ayude!
fuente
Use este código para la autenticación básica.
fuente
Me gustaría proporcionar una respuesta para el caso de que no tenga control sobre el código que abre la conexión. Como lo hice al usar el
URLClassLoader
para cargar un archivo jar desde un servidor protegido con contraseña.La
Authenticator
solución funcionaría, pero tiene el inconveniente de que primero intenta llegar al servidor sin una contraseña y solo después de que el servidor solicite una contraseña. Es un viaje de ida y vuelta innecesario si ya sabe que el servidor necesitaría una contraseña.Esto registra un nuevo protocolo
my
que se reemplazahttp
cuando se agregan las credenciales. Entonces, al crear el nuevoURLClassLoader
solo reemplacehttp
conmy
y todo está bien. Sé queURLClassLoader
proporciona un constructor que toma unURLStreamHandlerFactory
pero esta fábrica no se usa si la URL apunta a un archivo jar.fuente
Desde Java 9, puedes hacer esto
fuente
setAuthenticator()
método.IMPLEMENTACIÓN DE ANDROD Un método completo para solicitar una respuesta de datos / cadena del servicio web solicitando autorización con nombre de usuario y contraseña
fuente
Lo hice de esta manera, necesitas hacer esto, solo copia y pega, sé feliz
fuente