Pergunta

Estou tentando analisar uma página da web usando Java com UrlConnection. Eu tento configurar o agente de usuário assim:

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

Mas o agente de usuário resultante é o que eu especificar, com "Java/1.5.0_19" anexado até o final. Existe uma maneira de realmente definir o agente do usuário sem essa adição?

Foi útil?

Solução

Fora da mão, definindo o http.agent propriedade do sistema para "" Pode fazer o truque (não tenho o código na minha frente).

Você pode se safar:

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

Mas isso pode exigir uma corrida entre você e a inicialização do manipulador de protocolo URL, se isso armazena em cache o valor na inicialização (na verdade, eu não acho que sim).

A propriedade também pode ser definida através de arquivos JNLP (disponíveis para applets de 6u10) e na linha de comando:

-Dhttp.agent=

Ou para comandos de wrapper:

-J-Dhttp.agent=

Outras dicas

Apenas para esclarecimento: setRequestProperty("User-Agent", "Mozilla ...") agora funciona muito bem e não anexa java/xx no final! Pelo menos com Java 1.6.30 e mais recente.

Ouvi na minha máquina com o NetCat (um ouvinte de porta):

$ nc -l -p 8080

Ele simplesmente ouve na porta, para que você veja qualquer coisa que seja solicitada, como cabeçalhos HTTP em bruto.

E obteve os seguintes cabeçudos HTTP sem o 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

E com o 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 você pode ver, o agente do usuário foi definido corretamente.

Exemplo 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());
    }

}

seu trabalho para mimDefina o agente de usuário no 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");

Os servidores HTTP tendem a rejeitar navegadores e sistemas antigos.

A página Blog de tecnologia (WH): agentes de usuários mais comuns reflete a propriedade agente do usuário do seu navegador atual na seção "Seu agente do usuário é:", que pode ser aplicado para definir a propriedade de solicitação "agente de usuário" de um java.net.URLConnection ou a propriedade do sistema "http.agent".

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top