Python demandes - impression de l'ensemble de la requête http (raw)?
Tout en utilisant le demande
module, est-il possible d'imprimer la crue de la requête HTTP?
Je ne veux pas uniquement les en-têtes, je veux la demande en ligne, les en-têtes et le contenu de la version papier. Est-il possible de voir ce qui, finalement, est construit à partir de la requête HTTP?
- Jetez un oeil à this réponse
- il est demandé au sujet du contenu de la demande, pas la réponse
- C'est une bonne question. En regardant le source, il ne semble pas comme il existe un moyen d'obtenir le contenu brut d'un prêt demande, et c'est seulement sérialisé quand il est envoyé. Que semble que ce serait une bonne fonctionnalité.
- Eh bien, vous pourriez aussi commencer à wireshark et le voir de cette façon.
- il serait difficile de l'intégrer, comme un
requests
fonctionnalité, car cela signifierait la reécriture/contournanturllib3
ethttplib
. Voir la trace de la pile ci-dessous - Cela a fonctionné pour moi - stackoverflow.com/questions/10588644/...
Vous devez vous connecter pour publier un commentaire.
Depuis la v1.2.3 Demandes ajouté le PreparedRequest objet. Selon les documents "contient exact d'octets qui sera envoyé au serveur".
On peut utiliser ce joli imprimer une demande, comme suit:
qui produit:
Ensuite, vous pouvez envoyer la demande réelle avec ceci:
Ces liens sont à la documentation la plus récente disponible, de sorte qu'ils pourraient changer dans le contenu:
Avancé - Préparé demandes et API - niveau Inférieur des classes
requests
est simple, donc je pense que cela devrait devenir la accepté de répondre à2.0.0
, cependant, ne pas1.2.3
response = requests.post(...)
(ourequests.get
ourequests.put
, etc) méthodes, vous pouvez réellement obtenir laPreparedResponse
parresponse.request
. Il peut enregistrer les travaux de manipuler manuellementrequests.Request
etrequests.Session
, si vous n'avez pas besoin d'accéder à http brut de données avant de recevoir une réponse.Note: cette réponse est obsolète. Des versions plus récentes de
requests
en charge l'obtention de la demande de contenu directement, comme AntonioHerraizS réponse documents.Il n'est pas possible d'obtenir la vrai contenu brut de la demande de
requests
, puisqu'il ne traite qu'avec les objets de niveau supérieur, tels que les les en-têtes de et type de méthode.requests
utiliseurllib3
pour envoyer des demandes, maisurllib3
aussi ne traitent pas les données brutes - il utilisehttplib
. Voici un représentant de la trace de la pile d'une demande de:À l'intérieur de la
httplib
des machines, nous pouvons voirHTTPConnection._send_request
indirectement utiliseHTTPConnection._send_output
, qui finalement crée la demande brute et corps (si elle existe), et utiliseHTTPConnection.send
de les envoyer séparément.send
enfin atteint le socket.Car il n'y a pas de crochets pour faire ce que vous voulez, comme un dernier recours, vous pouvez monkey patch
httplib
pour obtenir le contenu. C'est un fragile de la solution, et vous devrez peut-être l'adapter sihttplib
est changé. Si vous avez l'intention de distribuer le logiciel à l'aide de cette solution, vous pouvez envisager d'emballagehttplib
au lieu d'utiliser le système, ce qui est facile, car c'est un pur module python.Hélas, sans plus attendre, la solution:
qui donne de la sortie:
patch_send
plusieurs fois, une seule fois, après l'importation dehttplib
Une bien meilleure idée est d'utiliser le requests_toolbelt de la bibliothèque, ce qui peut générer à la fois les demandes et les réponses sous forme de chaînes pour vous d'imprimer à la console. Il gère l'ensemble de la délicate cas avec les fichiers et les codages qui la solution ci-dessus ne gère pas bien.
C'est aussi simple que cela:
Source: https://toolbelt.readthedocs.org/en/latest/dumputils.html
Vous pouvez simplement l'installer en tapant:
Je suis en utilisant demandes version 2.18.4 et Python 3
Voici un code qui fait la même chose, mais avec des en-têtes de réponse:
J'ai passé beaucoup de temps à chercher pour cela, donc je vais la laisser ici, si quelqu'un a besoin.
J'ai utiliser la fonction suivante pour format demandes. C'est comme @AntonioHerraizS sauf qu'il sera assez-imprimer des objets JSON dans le corps, et les étiquettes de toutes les parties de la demande.
Et j'ai une fonction similaire au format de la réponse: