IOException: "El desafío de autenticación recibido es nulo" (Apache Harmony / Android)
Estoy tratando de enviar un GET a través de HttpURLConnection de Android (que es un org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection), y al recibir la respuesta, se lanza una IOException:
In doRequestInternal (): "El desafío de autenticación recibido es nulo"
- Problema con el espacio en blanco de Android TabWidget
- Cómo extraer el código del archivo apk
- Actividad para enviar o redirigir a otras actividades
- Uso de Android Calendar para obtener la hora actual
- Creación de JSONObject de cadena en JAVA (org.json)
¿Qué significa este error y qué está causando esto? Estoy escribiendo los parámetros de OAuth al encabezado de Autorización, pero lo hago en otras ocasiones, también, sin problemas.
if (connection == null) { connection = (HttpURLConnection) new URL(endpointUrl).openConnection(); connection.setRequestMethod("GET"); } //... do some OAuth message signing connection.connect(); int statusCode = connection.getResponseCode(); // throws IOException
- Andtouide edittext minmum y valor máximo
- Calcular la distancia de gestos en Android
- java.lang.NullPointerException error en una consulta
- Actualización de Eclipse con herramientas de desarrollo de Android v. 23
- Cómo manejar <br /> etiquetas en Android
- Obtener longitud desconocidaHttpInputStream al obtener InputStream de HttpURLConnection en android
- La entrada de recursos com.crashlytics.android.build_id ya está definida
- ¿La lectura de la altitud del barómetro Android es incorrecta?
Me enteré de la razón.
En primer lugar, a todos los que no son conscientes de lo que este error significa (yo seguro no fue): Esta excepción se lanza si el servidor responde con un 401. Muy intuitivo, teniendo en cuenta que fue lanzado en getResponseCode () Usted nunca puede comprobar para 401s usted mismo, pero tiene que coger este IOException en lugar de otro …).
La causa real para el 401 fue que no envié un código de verificador de OAuth donde se esperaba en este punto.
Tal vez será útil para alguien …
Esta excepción sólo significa encabezados de respuesta mal formados: no se encontró el encabezado "WWW-Authenticate". Además, las respuestas fragmentadas con código 401 no son compatibles, por lo que necesitará el encabezado "Content-Length" (puede ser cero).
Sólo tiene que añadir este encabezado a la solicitud (en el lado del servidor):
WWW-Authenticate: None
Tenga en cuenta que hay dos enfoques de autenticación: Autenticación HTTP y autenticación basada en tokens . Si está utilizando la autenticación HTTP, debe seguir la especificación referenciada: incluir el campo de encabezado WWW-Authenticate en el lado del servidor, utilizar java.net.Authenticator
localmente, etc. Si está utilizando la autenticación basada en token, obviamente tiene que usar cookies para Almacenar el token y hacer capaz de mantener sesiones vivas vivas. En tal caso poner el siguiente código en android.app.Application.onCreate()
CookieManager cookieManager = new CookieManager(); CookieHandler.setDefault(cookieManager);
Y no tendrá problemas al recibir HTTP 401 desde el servidor sin campo de encabezado WWW-Authenticate .
- ImageButton Border Transparency – ¿Cómo puedo eliminar el borde cuadrado alrededor de la imagen redonda?
- Gradle versión 1.8 es necesario. La versión actual es 1.6