Python: urllib/urllib2/httplib confusion
Je suis en train de tester la fonctionnalité d'une application web par le script d'une séquence de connexion en Python, mais je vais avoir quelques problèmes.
Voici ce que je dois faire:
- Faire un POST avec un peu de paramètres et les en-têtes.
- Suivre une redirection
- Récupérer le code HTML du corps.
Maintenant, je suis relativement nouveau à python, mais les deux choses que j'ai testé jusqu'à présent n'ont pas travaillé. J'ai d'abord utilisé httplib, avec putrequest() (passer les paramètres dans l'URL), et putheader(). Cela ne semble pas suivre les redirections.
Ensuite, j'ai essayé urllib et urllib2, en passant les deux en-têtes et les paramètres dicts. Cela semble revenir à la page de connexion, au lieu de la page que je suis en train de login, je suppose que c'est à cause de l'absence de témoins ou de quelque chose.
Ai-je raté quelque chose de simple?
Grâce.
- Utiliser le python demandes de la bibliothèque.
Vous devez vous connecter pour publier un commentaire.
L'accent sur
urllib2
pour cela, il fonctionne très bien. Ne salissez pas avechttplib
, ce n'est pas l'API de niveau supérieur.Ce que vous êtes à noter est que
urllib2
ne pas suivre la redirection.Vous avez besoin à la fois dans une instance de
HTTPRedirectHandler
capter et suivre les redirections.En outre, vous pouvez créer des sous-classes par défaut
HTTPRedirectHandler
pour capturer des informations que vous pourrez ensuite vérifier dans le cadre de vos tests unitaires.Vous pouvez ensuite utiliser ce
opener
objet de POST et GET, la manipulation des redirections et les cookies correctement.Vous pouvez ajouter vos propres sous-classe de
HTTPHandler
à capturer et enregistrer les différents codes d'erreur, aussi.Voici mon point de vue sur cette question.
@S. Lott, je vous remercie. Votre suggestion a fonctionné pour moi, avec certaines modifications. Voici comment je l'ai fait.
J'ai eu à faire cette chose exacte que moi-même récemment. J'ai seulement besoin des classes de la bibliothèque standard. Voici un extrait de mon code:
Je donnerais Mécaniser (http://wwwsearch.sourceforge.net/mechanize/) un coup de feu. Il peut bien gérer votre cookie/en-têtes, de manière transparente.
Essayer twill - un langage simple qui permet aux utilisateurs de naviguer sur le Web à partir d'une interface de ligne de commande. Avec twill, vous pouvez naviguer à travers les sites Web qui utilisent les formulaires, les cookies, et la plupart des fonctionnalités de site Web. Plus au point, sergé est écrit dans
Python
et a un l'API python, e.g:Outre le fait que vous pouvez manquer un cookie, il pourrait y avoir un certain domaine(s) dans le formulaire que vous n'êtes pas Poster sur le serveur. La meilleure façon serait de saisir le message à partir d'un navigateur web. Vous pouvez utiliser LiveHTTPHeaders ou WireShark pour snoop le trafic et de reproduire les mêmes comportements dans votre script.
Funkload est une excellente application web outil de test également. Il s'enroule webunit pour gérer l'émulation de navigateur, puis vous donne à la fois fonctionnelle et de test de charge des fonctions sur le dessus.