2010-03-27 28 views
68

Estoy tratando de analizar una página web utilizando Java con URLConnection. Trato de configurar el usuario-agente de la siguiente manera:Configuración del agente de usuario de un java URLConnection

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"); 

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

+0

¿Cómo sabe que es el usuario-agente resultante? ¿Dónde lo estás viendo? – skaffman

+1

Al buscarlo con PHP y mostrarlo en la página que está siendo capturada por Java. – DiglettPotato

Respuesta

53

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

Usted puede salirse con:

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

pero que podrían requerir una carrera entre usted y la inicialización del controlador de protocolo URL, si se almacena en caché el valor en el arranque (en realidad, no creo que lo hace)

La propiedad también se puede configurar a través de archivos JNLP (disponibles para los applets de 6u10) y en la línea de comandos:

-Dhttp.agent= 

O para los comandos de contenedor:

-J-Dhttp.agent= 
+0

¿Cómo haría eso? c.setRequestProperty ("http.agent", "");? Estoy asumiendo en otro lugar ... – DiglettPotato

+0

http://www.innovation.ch/java/HTTPClient/advanced_info.html -> http.agent – Karussell

+0

@diglettpotato Me falta la palabra sistema. Propiedad del sistema Responder ediciones ... –

76

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

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

$ nc -l -p 8080 

Simplemente escucha en el puerto, por lo que se ve nada que consigue solicitó, como http-headers primas.

Y tiene la siguiente http-headers 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 se puede ver el agente de usuario se estableció 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()); 
    } 

} 
+12

Esta debería ser la respuesta aceptada. –

+2

Bueno, si uno todavía usa Java 1.5 – Dejell

+0

@Dejell ¿Está sugiriendo que este enfoque está desactualizado? Estoy usando Java 7 y esto hizo exactamente lo que yo quería que hiciera. – Shadoninja

1

su trabajo para mí puse el User-Agent en el 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"); 
Cuestiones relacionadas