with setrequestproperty setrequestmethod openconnection example conn java user-agent

setrequestproperty - send post java



ConfiguraciĆ³n del agente de usuario de un URLConnection java (4)

Estoy tratando de analizar una página web usando Java con URLConnection. Intento configurar el agente de usuario de esta manera:

java.net.URLConnection c = url.openConnection(); c.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2");

Pero el agente de usuario resultante es el que especifico, con "Java / 1.5.0_19" agregado al final. ¿Hay alguna manera de establecer realmente el agente de usuario sin esta adición?


De la mano, establecer la propiedad del sistema http.agent en "" podría hacer el truco (no tengo el código en frente de mí).

Puedes salirte con la tuya:

System.setProperty("http.agent", "");

pero eso podría requerir una carrera entre usted y la inicialización del manejador de protocolo URL, si almacena en caché el valor al inicio (en realidad, no creo que lo haga).

La propiedad también se puede establecer a través de archivos JNLP (disponible para applets desde 6u10) y en la línea de comando:

-Dhttp.agent=

O para los comandos de contenedor:

-J-Dhttp.agent=


Solo por aclaración: ¡setRequestProperty funciona bien! Al menos con Java 1.6.30.

Escuché en mi máquina con netcat (un oyente de puerto):

$ nc -l -p 8080

Simplemente escucha en el puerto, por lo que puede ver todo lo que se solicita, como los encabezados http sin formato.

Y obtuve los siguientes encabezados http sin setRequestProperty:

GET /foobar HTTP/1.1 User-Agent: Java/1.6.0_30 Host: localhost:8080 Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Connection: keep-alive

Y CON setRequestProperty:

GET /foobar HTTP/1.1 User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2 Host: localhost:8080 Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Connection: keep-alive

Como puede ver, el agente de usuario se configuró correctamente.

Ejemplo completo:

import java.io.IOException; import java.net.URL; import java.net.URLConnection; public class TestUrlOpener { public static void main(String[] args) throws IOException { URL url = new URL("http://localhost:8080/foobar"); URLConnection hc = url.openConnection(); hc.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2"); System.out.println(hc.getContentType()); } }


su trabajo para mí establece el User-Agent en addRequestProperty.

URL url = new URL(<URL>); HttpURLConnection httpConn = (HttpURLConnection) url.openConnection(); httpConn.addRequestProperty("User-Agent","Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0");