Une méthode simple: activez la journalisation dans les versions récentes des demandes (1.x et supérieures).
Requests utilise la configuration du module http.client
et logging
pour contrôler la verbosité de la journalisation, comme décrit ici .
Manifestation
Code extrait de la documentation liée:
import requests
import logging
# These two lines enable debugging at httplib level (requests->urllib3->http.client)
# You will see the REQUEST, including HEADERS and DATA, and RESPONSE with HEADERS but without DATA.
# The only thing missing will be the response.body which is not logged.
try:
import http.client as http_client
except ImportError:
# Python 2
import httplib as http_client
http_client.HTTPConnection.debuglevel = 1
# You must initialize logging, otherwise you'll not see debug output.
logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)
requests_log = logging.getLogger("requests.packages.urllib3")
requests_log.setLevel(logging.DEBUG)
requests_log.propagate = True
requests.get('https://httpbin.org/headers')
Exemple de sortie
$ python requests-logging.py
INFO:requests.packages.urllib3.connectionpool:Starting new HTTPS connection (1): httpbin.org
send: 'GET /headers HTTP/1.1\r\nHost: httpbin.org\r\nAccept-Encoding: gzip, deflate, compress\r\nAccept: */*\r\nUser-Agent: python-requests/1.2.0 CPython/2.7.3 Linux/3.2.0-48-generic\r\n\r\n'
reply: 'HTTP/1.1 200 OK\r\n'
header: Content-Type: application/json
header: Date: Sat, 29 Jun 2013 11:19:34 GMT
header: Server: gunicorn/0.17.4
header: Content-Length: 226
header: Connection: keep-alive
DEBUG:requests.packages.urllib3.connectionpool:"GET /headers HTTP/1.1" 200 226
import httplib
parimport requests.packages.urllib3.connectionpool as httplib
ou utilisez six etfrom six.moves import http_client as httplib
.requests
2.18.1 et Python 3, l'enregistreurlogging.getLogger("requests.packages.urllib3")
n'existe pas ou n'a aucun effet.from http.client import HTTPConnection
r
est une réponse. Il a un attribut de demande qui contient les informations dont vous avez besoin.r.request.headers
donne aux en-têtes:A ensuite
r.request.data
le corps comme une cartographie. Vous pouvez convertir ceci avecurllib.urlencode
s'ils préfèrent:en fonction du type de réponse, l'
.data
attribut -attribut peut être manquant et un.body
attribut-être là à la place.la source
response.request
semble être unPreparedRequest
dans mon cas; il n'en a pas.data
mais à la.body
place.response.url
(ce qui est un peu différent en ce qu'elle n'est pasresponse.request...
Vous pouvez utiliser HTTP Toolkit pour faire exactement cela.
C'est particulièrement utile si vous devez le faire rapidement, sans changement de code: vous pouvez ouvrir un terminal à partir de HTTP Toolkit, exécuter n'importe quel code Python à partir de là comme d'habitude, et vous pourrez voir le contenu complet de chaque HTTP / HTTPS demander immédiatement.
Il existe une version gratuite qui peut faire tout ce dont vous avez besoin, et c'est 100% open source.
Je suis le créateur de HTTP Toolkit; Je l'ai construit moi-même pour résoudre exactement le même problème pour moi il y a quelque temps! Moi aussi, j'essayais de déboguer une intégration de paiement, mais leur SDK ne fonctionnait pas, je ne pouvais pas dire pourquoi et j'avais besoin de savoir ce qui se passait réellement pour le corriger correctement. C'est très frustrant, mais pouvoir voir le trafic brut aide vraiment.
la source
Si vous utilisez Python 2.x, essayez d'installer un ouvreur urllib2 . Cela devrait imprimer vos en-têtes, bien que vous deviez peut-être combiner cela avec d'autres ouvreurs que vous utilisez pour atteindre le HTTPS.
la source
L'
verbose
option de configuration peut vous permettre de voir ce que vous voulez. Il y a un exemple dans la documentation .REMARQUE: Lisez les commentaires ci-dessous: Les options de configuration détaillée ne semblent plus être disponibles.
la source