JSoup UserAgent, la façon de les mettre à droite?

j'essaie d'analyser la page d'accueil de facebook avec JSoup mais je reçois toujours le Code HTML pour les appareils mobiles et pas la version pour les navigateurs normaux(dans mon cas Firefox 5.0).

je configure mon User Agent comme ceci:

doc = Jsoup.connect(url)
      .userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0")
      .get();

est-ce que je fais quelque chose de mal?

EDIT:

je viens de lire http://whatsmyuseragent.com / et il semble que l'Agent utilisateur est travailler. Maintenant c'est encore plus déroutant pour moi pourquoi le site http://www.facebook.com / retourne une version différente en utilisant JSoup et mon navigateur. Les deux utilisent le même client....

j'ai remarqué ce comportement sur certains autres sites. Si vous pouviez m'expliquer ce qu'est la Question, je serais plus qu'heureux.

34
demandé sur Markus 2011-07-05 15:06:50

4 réponses

vous pourriez essayer de définir l'en-tête referrer aussi bien:

doc = Jsoup.connect("https://www.facebook.com/")
      .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
      .referrer("http://www.google.com")
      .get();
45
répondu Denaitre Roux 2012-09-01 01:16:58
Response response= Jsoup.connect(location)
           .ignoreContentType(true)
           .userAgent("Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0")  
           .referrer("http://www.google.com")   
           .timeout(12000) 
           .followRedirects(true)
           .execute();

Document doc = response.parse();

User Agent

utilisez le dernier agent utilisateur. Voici la liste complète http://www.useragentstring.com/pages/useragentstring.php .

Timeout

N'oubliez pas non plus d'ajouter timout, car il faut parfois plus de temps que d'habitude pour télécharger la page.

Referer

définit le referer comme google.

Suivre les redirections

suivez les redirections pour accéder à la page.

execute() au lieu de get()

utilisez execute() pour obtenir l'objet Response . Qui peut vous aider à vérifier le contenu codes de type et de statut en cas d'erreur.

plus tard, vous pouvez analyser l'objet de réponse à obtenir le document.

29
répondu Sorter 2018-09-04 10:00:16

il est probable que Facebook Configure (puis attend) certains cookies dans ses requêtes, et considère un en-tête qui n'en contient pas comme un bot/utilisateur mobile/navigateur limité/autre chose.

il y a plusieurs questions à propos de Gérer les cookies avec JSoup cependant vous pouvez trouver plus simple d'utiliser HttpUrlConnection ou HttpClient D'Apache et ensuite passer le résultat à JSoup. Un excellent writeup sur tout ce que vous devez savoir: À l'aide de java.net.URLConnection à feu et à gérer les requêtes HTTP

Un moyen utile pour déboguer la différence entre votre navigateur et JSoup est Chrome réseau de l'inspecteur . Vous pouvez ajouter des en-têtes à partir du navigateur à JSoup un par un jusqu'à ce que vous obtenez le comportement que vous attendez, puis réduire exactement quels en-têtes vous avez besoin.

8
répondu dimo414 2017-05-23 12:34:27

j'ai eu le problème 403 et le réglage .userAgent("Mozilla") a fonctionné pour moi (donc il n'a pas besoin d'être super spécifique pour travailler.

1
répondu Cody Jacques 2016-11-03 14:13:39