openstream example ejemplo java http networking httpurlconnection urlconnection

example - openstream java



¿Puedo anular el encabezado del Host donde uso la clase HttpUrlConnection de java? (3)

El encabezado de Host se rellena con la HttpURLConnection función de la URL. No puedes abrir foo.com con Host=bar.com . De la RFC

El campo del encabezado de solicitud del Host especifica el host de Internet y el número de puerto del recurso que se solicita, según se obtiene del URI original proporcionado por el usuario o recurso de referencia (generalmente una URL HTTP)

Por cierto, también puedes probar los componentes http de apache .

Estoy usando el siguiente código para abrir una conexión http en java:

URL url = new URL("http://stackoverflow.com"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setDoOutput(true); conn.setRequestMethod("GET"); conn.setRequestProperty("Host", "Test:8080"); conn.getOutputStream();

Sin embargo, parece que la llamada conn.setRequestProperty ("Host", "Test: 8080") no tiene efecto, independientemente del orden al que llamo los métodos y el Host se restablece al servidor de destino. ¿Hay alguna forma de anular el encabezado del Host sin utilizar una biblioteca diferente?

TIA Matt


Este es un problema con la forma en que volley maneja HTTPUrlConnection y reintenta la política.

Una solución rápida es extender la clase "HurlStack" y anular la función "createConnection" para devolver una HTTPUrlConnection con ChunkStreamMode de 0

public class CustomHurlStack extends HurlStack { public CustomHurlStack(){ super(); } @Override protected HttpURLConnection createConnection(URL url) throws IOException { HttpURLConnection connection = super.createConnection(url); connection.setChunkedStreamingMode(0); return connection; }

}


Esto solía funcionar en el pasado, pero se ha deshabilitado como parte de una solución de seguridad. Al parecer, sin una nota en el registro de cambios. Incluso hay errores como #7022056 para esto en bugs.sun.com.

Hay una pregunta similar para otro encabezado, donde la respuesta va más en los detalles, así que solo lo vinculo en lugar de escribirlo yo mismo. :-)

Las únicas soluciones alternativas parecen estar configurando sun.net.http.allowRestrictedHeaders en true o usar otra biblioteca http como los componentes http ya mencionados.