Python: Envoyer une requête POST en utilisant simplement une chaîne brute
Je veux envoyer une requête POST en utilisant simplement une chaîne brute.
Je suis en train d'écrire un analyseur syntaxique. J'ai chargé la page et vu la complexité de la demande avec de nombreux en-têtes et le corps dans firebug:
__EVENTTARGET=&__EVENTARGUMENT=&__VIEW.... (11Kb or unreadable text)
Comment puis-je envoyer cette demande exacte une fois de plus (en-têtes+corps post) manuellement (passant comme une énorme chaîne de caractères)?
Comme:
func("%(headers) \n \n %(body)" % ... )
Je veux qu'il soit envoyer par mon script (et la réponse à manipuler) et ne veux pas faire un dictionnaire de paramètres et d'en-têtes manuellement.
Merci.
Comment savez-vous que les en-têtes sont et ce que le corps?
J'ai copié à partir de firebug. Je vais analyser la réponse .
Je ne comprends pas les détails du processus que vous essayez d'atteindre. Demandez-vous comment envoyer une requête POST en utilisant simplement une chaîne brute de python? Il commence à me jeter, quand vous parlez de firebug, comme si il ya quelque chose de client que vous voulez faire
oui, juste une demande à l'aide d'une chaîne brute à partir de python. merci pour cette formulation.
Vous n'avez pas le choix, mais au moins à convertir les en-têtes d'un dict, de sorte que vous pouvez l'ajouter à la demande.
J'ai copié à partir de firebug. Je vais analyser la réponse .
Je ne comprends pas les détails du processus que vous essayez d'atteindre. Demandez-vous comment envoyer une requête POST en utilisant simplement une chaîne brute de python? Il commence à me jeter, quand vous parlez de firebug, comme si il ya quelque chose de client que vous voulez faire
oui, juste une demande à l'aide d'une chaîne brute à partir de python. merci pour cette formulation.
Vous n'avez pas le choix, mais au moins à convertir les en-têtes d'un dict, de sorte que vous pouvez l'ajouter à la demande.
OriginalL'auteur Ben Usman | 2012-07-07
Vous devez vous connecter pour publier un commentaire.
L'autre réponse juste est devenu trop gros et source de confusion et montrait de plus que ce que vous demandez. J'ai senti que je devrait inclure un plus concise réponse pour les futurs lecteurs:
Vous aurez besoin d'au moins analyser les en-têtes arrière dans un dict, mais ses un minimum de travail. Ensuite, il suffit de passer tout le temps à une nouvelle demande.
*Remarque: Cette concis exemple suppose à la fois de vos en-têtes et vos données corps sont
application/x-www-form-urlencoded
format. Si les en-têtes sont en raw format de chaîne de caractères commeKey: Value
, consultez les autres répondre pour plus de détails sur l'analyse que la première.En fin de compte, vous ne pouvez pas simplement copier-coller le texte brut et exécuter une nouvelle demande. Il doit être divisés en-tête et les données dans les formats appropriés.
urllib2.HTTPError: HTTP Error 400: Bad Request
avec ceci fou demande générée par le ceci de la page lors de l'interrogation "Название аукциона" = Ford . Avez-vous des idées de pourquoi il pourrait être?Avez-vous fait de séparer vos en-têtes et existe déjà dans votre corps, et les deux sont-ils
application/x-www-form-urlencoded
?Mon post-corps a été mauvais. Maintenant, il fonctionne. Mais parfois, le serveur répond avec un mauvais encodage (je peux voir seulement la corbeille de ma sortie), malgré le fait d'en-tête est
'Accept-Charset': 'utf-8;q=0.7,*;q=0.3'
. De toute façon, je vous remercie.OriginalL'auteur jdi
@MInner:
urlparse.parse_qsl(headers)
Votre exemple des en-têtes est en supposant que l'OP a déjà le dictionnaire. Peut-être commencer avec mon
urlparse
la suggestion et de passer juste que la valeur d'en-tête, à la place de grand-tête d'analyse des trucsEn-têtes ajoutés à la poste. Vous devez simplement passer les en-têtes dans un dictionnaire. L'alternative est de les convertir dans un dictionnaire, ou pour utiliser des sockets et de mettre en œuvre la partie du protocole HTTP-vous. Je ne pense pas que ce soit ce que vous voulez.
OriginalL'auteur someone