85 votes

Définition de l'agent utilisateur d'une URLConnection java

J'essaie d'analyser une page Web en utilisant Java avec URLConnection. J'essaie de configurer l'agent utilisateur comme ceci :

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

Mais l'agent utilisateur résultant est celui que je spécifie, avec "Java/1.5.0_19" ajouté à la fin. Existe-t-il un moyen de définir réellement l'agent utilisateur sans cet ajout ?

0 votes

Comment savez-vous que c'est le user-agent résultant ? Où le voyez-vous ?

1 votes

En le récupérant avec PHP et en l'affichant sur la page qui est saisie par Java.

0 votes

Cela fonctionne maintenant, voir la deuxième réponse.

96voto

jens Points 708

Juste pour clarifier : setRequestProperty("User-Agent", "Mozilla ...") fonctionne maintenant très bien et n'ajoute pas java/xx à la fin ! Au moins avec Java 1.6.30 et plus récent.

J'ai écouté sur ma machine avec netcat (un listener de port) :

$ nc -l -p 8080

Il écoute simplement sur le port, de sorte que vous voyez tout ce qui est demandé, comme les en-têtes http bruts.

Et j'ai obtenu les en-têtes http suivants sans 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

Et AVEC 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

Comme vous pouvez le voir, l'agent utilisateur a été correctement défini.

Exemple complet :

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

}

2 votes

Eh bien, si on utilise encore Java 1.5.

4 votes

@Dejell Suggérez-vous que cette approche est dépassée ? J'utilise Java 7 et cela a fait exactement ce que je voulais.

0 votes

Ne fonctionne plus dans Java 11.

73voto

Tom Hawtin - tackline Points 82671

De la main à la main, le réglage de la http.agent la propriété du système à "" pourrait faire l'affaire (je n'ai pas le code sous les yeux).

Vous pourriez vous en sortir :

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

mais cela pourrait nécessiter une course entre vous et l'initialisation du gestionnaire de protocole URL, s'il met en cache la valeur au démarrage (en fait, je ne pense pas qu'il le fasse).

La propriété peut également être définie via les fichiers JNLP (disponibles pour les applets à partir de la 6u10) et sur la ligne de commande :

-Dhttp.agent=

Ou pour les commandes wrapper :

-J-Dhttp.agent=

0 votes

Comment dois-je faire ? c.setRequestProperty("http.agent",""); ? Je suppose que quelque part ailleurs...

1 votes

Ouais... ça marche comme sur des roulettes ! il suffit de faire un : System.setProperty("http.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") ; Et c'est parti ! !! :)

7voto

Karussell Points 7034

Légèrement modifié Tom Hawtins répondre à :

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

en fonction de http://www.ivoa.net/forum/apps/0903/0610.htm

6voto

Bachan Joseph Points 280

Son travail pour moi définir l'User-Agent dans la propriété 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");

2voto

Sam Ginrich Points 81

Les serveurs HTTP ont tendance à rejeter les anciens navigateurs et systèmes.

La page Tech Blog (wh) : Agents utilisateurs les plus courants reflète la propriété user-agent de votre navigateur actuel dans la section "Votre agent utilisateur est :" qui peut être appliquée pour définir la propriété de la demande "User-Agent" d'une demande d'accès à Internet. java.net.URLConnection ou la propriété système "http.agent".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X