Eine einfache Methode: Aktivieren Sie die Protokollierung in neueren Versionen von Requests (1.x und höher).
Requests verwendet die Konfiguration http.client
und das logging
Modul, um die Ausführlichkeit der Protokollierung zu steuern, wie hier beschrieben .
Demonstration
Code aus der verknüpften Dokumentation:
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')
Beispielausgabe
$ 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
durchimport requests.packages.urllib3.connectionpool as httplib
oder verwenden Sie sechs undfrom six.moves import http_client as httplib
.requests
2.18.1 und Python 3 ist der Loggerlogging.getLogger("requests.packages.urllib3")
nicht vorhanden oder hat keine Auswirkung.from http.client import HTTPConnection
r
ist eine Antwort. Es verfügt über ein Anforderungsattribut mit den benötigten Informationen.r.request.headers
gibt die Überschriften:Dann
r.request.data
hat der Körper als Mapping. Sie können dies mit konvertierenurllib.urlencode
wenn sie bevorzugen:Abhängig von der Art der Antwort
.data
fehlt möglicherweise das -attribute und.body
stattdessen ist ein -attribute vorhanden.quelle
response.request
scheintPreparedRequest
in meinem Fall eine zu sein; es hat.data
aber.body
stattdessen nicht.response.url
(was etwas anders ist, da dies nicht der Fall istresponse.request...
Sie können das HTTP Toolkit verwenden , um genau dies zu tun.
Dies ist besonders nützlich, wenn Sie dies schnell und ohne Codeänderungen tun müssen: Sie können ein Terminal über das HTTP-Toolkit öffnen, von dort aus wie gewohnt beliebigen Python-Code ausführen und den vollständigen Inhalt jedes HTTP / HTTPS anzeigen sofort anfordern.
Es gibt eine kostenlose Version, die alles kann, was Sie brauchen, und sie ist 100% Open Source.
Ich bin der Schöpfer des HTTP Toolkit. Ich habe es tatsächlich selbst gebaut, um vor einiger Zeit genau das gleiche Problem für mich zu lösen! Auch ich habe versucht, eine Zahlungsintegration zu debuggen, aber das SDK hat nicht funktioniert, ich konnte nicht sagen warum und ich musste wissen, was tatsächlich vor sich ging, um es richtig zu beheben. Es ist sehr frustrierend, aber es hilft wirklich, den rohen Verkehr zu sehen.
quelle
Wenn Sie Python 2.x verwenden, installieren Sie einen urllib2- Opener. Das sollte Ihre Header ausdrucken, obwohl Sie dies möglicherweise mit anderen Öffnern kombinieren müssen, die Sie verwenden, um das HTTPS zu treffen.
quelle
Mit der
verbose
Konfigurationsoption können Sie möglicherweise sehen, was Sie möchten. Es gibt ein Beispiel in der Dokumentation .HINWEIS: Lesen Sie die folgenden Kommentare: Die ausführlichen Konfigurationsoptionen scheinen nicht mehr verfügbar zu sein.
quelle