/ / ¿Por qué HttpURLConnection no reenvía contenido PUT cuando reintenta la conexión después de la respuesta 401? - Java, Android, httpurlconnection

¿Por qué HttpURLConnection no reenvía contenido PUT cuando reintenta la conexión después de la respuesta 401? - Java, Android, httpurlconnection

Tengo un problema un poco raro con HttpURLConnection en Android (API nivel 7). Estoy usando autenticación básica, configuré usando el Autentificador predeterminado de esta manera:

Authenticator.setDefault(new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password.toCharArray());
}
});

Estoy haciendo una solicitud estándar de la siguiente manera:

public InputStream put(String type, String name, String xml){

try{
String urlString = this.getURLString(type,name);
URL url = new URL(urlString);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setDoOutput(true);
urlConnection.setRequestMethod("PUT");
OutputStreamWriter out = new OutputStreamWriter(
urlConnection.getOutputStream());
out.write(xml);
out.close();
urlConnection.getInputStream();
urlConnection.disconnect();
return null;

}
catch(Exception e){
Log.e(TAG,e.getMessage());
return urlConnection.getErrorStream();
}
}

Una traza de paquete muestra que el contenido está siendoenviado con la solicitud HTTP. Luego recibo un 401 No autorizado del servidor y reenvío la respuesta. Esta vez, las credenciales se envían como esperaba, pero ya no se envía el contenido. Ahora es una solicitud PUT en blanco con una longitud de contenido de 0.

¿Alguien ha visto esto antes, y cómo lo arreglo?

Gracias, Sean

Respuestas

1 para la respuesta № 1

Eventualmente, resolví esto al no usar el Authenticator y, en su lugar, agregar el encabezado de Autorización Básica manualmente a HttpURLConnection.