J'essaie d'analyser la page d'accueil de Facebook avec JSoup
mais j'obtiens toujours le code HTML pour les appareils mobiles et non la version pour les navigateurs normaux (dans mon cas Firefox 5.0).
Je configure mon agent utilisateur 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?
ÉDITER:
Je viens d'analyser http://whatsmyuseragent.com/ et il semble que l'agent utilisateur fonctionne. Maintenant, c'est encore plus déroutant pour moi pourquoi le site http://www.facebook.com/ renvoie une version différente lors de l'utilisation de JSoup et de mon navigateur. Les deux utilisent le même useragent ....
J'ai également remarqué ce comportement sur certains autres sites maintenant. Si vous pouviez m'expliquer quel est le problème, je serais plus qu'heureux.
Vous pouvez également essayer de définir l'en-tête du référent:
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();
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();
Agent utilisateur
Utilisez le dernier agent utilisateur. Voici la liste complète http://www.useragentstring.com/pages/useragentstring.php .
Délai d'expiration
N'oubliez pas non plus d'ajouter un délai d'attente, car il faut parfois plus que le délai normal pour télécharger la page.
Référent
Définissez le référent sur google.
Suivez les redirections
suivez les redirections pour accéder à la page.
execute () au lieu de get ()
Utilisez execute () pour obtenir l'objet Response . Ce qui peut vous aider à vérifier le type de contenu et les codes d'état en cas d'erreur.
Plus tard, vous pouvez analyser l'objet de réponse pour obtenir le document.
Il est probable que Facebook installe (puis attend) certains cookies dans ses demandes, et considère qu'un en-tête qui en manque est un bot/utilisateur mobile/navigateur limité/autre chose.
Il y a plusieurs questions concernant gérer les cookies avec JSoup mais vous pouvez trouver plus simple d'utiliser HttpUrlConnection ou HttpClient d'Apache, puis de passer le résultat à JSoup. Un excellent résumé de tout ce que vous devez savoir: tilisation de Java.net.URLConnection pour déclencher et gérer les requêtes HTTP
Un moyen utile de déboguer la différence entre votre navigateur et JSoup est inspecteur de réseau de Chrome . Vous pouvez ajouter des en-têtes du navigateur à JSoup un par un jusqu'à ce que vous obteniez le comportement que vous attendez, puis restreindre exactement les en-têtes dont vous avez besoin.
J'ai eu le problème 403 et le réglage de .userAgent("Mozilla")
a fonctionné pour moi (il n'a donc pas besoin d'être très spécifique pour fonctionner.