2010-06-19 4 views
1

J'essayais d'utiliser le programme cURL dans BASH pour télécharger le code source d'une page Web. J'ai de la difficulté à télécharger le code d'une page lorsque la page utilise un codage plus complexe que le simple HTML. Par exemple, je suis en train de voir le code source de la page suivante avec la commande suivante:cURL - analyse de la source d'un site Web

curl "http://shop.sprint.com/NASApp/onlinestore/en/Action/DisplayPhones?INTNAV=ATG:HE:Phones" 

Cependant le résultat de cela ne correspond pas au code source généré par Firefox lorsque je clique sur « Afficher la source ». Je crois que c'est parce qu'il y a des éléments Javascript sur la page, mais je ne peux pas en être sûr.

Par exemple, je ne peux pas faire:

curl "http://shop.sprint.com/NASApp/onlinestore/en/Action/DisplayPhones?INTNAV=ATG:HE:Phones" | grep "Access to 4G speeds" 

Même si cette phrase est clairement trouvée dans la source Firefox. J'ai essayé de parcourir les pages de manuel, mais je ne connais pas assez le problème pour trouver une solution possible.

Une réponse préférable inclura pourquoi cela ne fonctionne pas comme je le souhaite et une solution au problème en utilisant curl ou un autre outil exécutable depuis une machine Linux.

EDIT:

Sur suggestion ci-dessous j'ai également inclus un commutateur useragent sans succès:

curl "http://shop.sprint.com/NASApp/onlinestore/en/Action/DisplayPhones?INTNAV=ATG:HE:Phones" -A "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3" | grep -i "Sorry" 

Répondre

4

je ne vois pas la chose « L'accès à la vitesse 4G » en premier lieu quand je aller à cette page.

Les deux coupables les plus probables de cette différence sont les cookies et votre user-agent.

Vous pouvez spécifier les cookies manuellement en utilisant à la fois curl ou wget. Déverser vos cookies de Firefox en utilisant tous les plugins que vous voulez, ou tout simplement

javascript:prompt('',document.cookie); 

dans votre barre d'adresse puis coller lire à travers les pages de manuel pour wget ou boucle et voir comment inclure ce cookie.


EDIT: Il semble être ce que je pensais, un cookie manquant.

curl --cookie "INSERT THE COOKIE YOU GOT HERE" http://shop.sprint.com/NASApp/onlinestore/en/Action/DisplayPhones?INTNAV=ATG:HE:Phones | grep "Access to 4G" 

Comme indiqué ci-dessus, vous pouvez saisir tout ce que vous cookie est en haut: javascript:prompt('',document.cookie) puis copiez le texte par défaut qui apparaît. Assurez-vous que vous êtes sur la page de sprint lorsque vous tenez que, dans la barre d'adresse (sinon vous allez finir avec le mauvais cookie de site)


EDIT 2

La raison pour laquelle le cookie de votre navigateur et votre biscuit coquille était différent était le différent dans l'interaction qui a eu lieu.

La raison pour laquelle je n'ai pas vu l'accès à la vitesse 4G dont vous parliez en premier lieu était que je n'avais pas entré mon code postal.

Si vous voulez avoir un cookie constamment pertinent, vous pouvez forcer le curl à faire tout ce qui est nécessaire pour obtenir ce cookie, dans ce cas, entrer un code postal.

En boucle, vous pouvez le faire avec de multiples demandes et en maintenant les biscuits récupérés dans une boîte à biscuits:

[stackoverflow] curl --help | grep cookie 
-b/--cookie <name=string/file> Cookie string or file to read cookies from (H) 
-c/--cookie-jar <file> Write cookies to this file after operation (H) 
-j/--junk-session-cookies Ignore session cookies read from file (H) 

Alors il suffit de spécifier une jarre à biscuits, envoyer la demande d'envoyer le code postal, puis de travailler loin.

+0

Juste sous l'Evo - Plus de vues \t HTC EVO ™ 4G * L'accès à des vitesses 4G qui sont jusqu'à 10 fois plus rapide que la 3G * double mode 3G/appareil 4G, l'accès à fiable 3G – Ryan

+0

Merci une tonne!! Ma dernière question si vous avez une seconde est de savoir si ce cookie va durer assez longtemps pour exécuter ce script sur une période de temps? Ou devrais-je automatiser le téléchargement de ce cookie à nouveau? – Ryan

0

Si vous obtenez un code source différent de la même source que le serveur, reniflant le plus probablement votre agent utilisateur et présentant un code spécifique. Javascript peut agir sur le DOM et faire toutes sortes de choses mais si vous utilisez 'see source' le code sera exactement le même que celui que votre navigateur a lu (avant la manipulation du DOM).

Questions connexes