Простой способ: включить ведение журнала в последних версиях запросов (1.x и выше.)
Requests использует конфигурацию модуля http.client
и logging
для управления подробностью ведения журнала, как описано здесь .
демонстрация
Код взят из связанной документации:
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')
Пример вывода
$ 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
наimport requests.packages.urllib3.connectionpool as httplib
или используйте шесть иfrom six.moves import http_client as httplib
.requests
2.18.1 и Python 3 регистраторlogging.getLogger("requests.packages.urllib3")
не существует или не имеет никакого эффекта.from http.client import HTTPConnection
r
это ответ. У него есть атрибут запроса, в котором есть нужная вам информация.r.request.headers
дает заголовки:Затем
r.request.data
имеет тело в качестве отображения. Вы можете преобразовать это,urllib.urlencode
если они предпочитают:в зависимости от типа ответа
.data
-attribute может отсутствовать и.body
вместо него может быть -attribute.источник
response.request
кажется,PreparedRequest
в моем случае; это не имеет,.data
но.body
вместо этого.response.url
(что немного отличается тем, что это не такresponse.request...
Вы можете использовать HTTP Toolkit, чтобы сделать именно это.
Это особенно полезно, если вам нужно сделать это быстро, без изменений кода: вы можете открыть терминал из HTTP Toolkit, запустить любой код Python оттуда, как обычно, и вы сможете увидеть полное содержимое каждого HTTP / HTTPS Запрос немедленно.
Есть бесплатная версия, которая может делать все, что вам нужно, и она на 100% с открытым исходным кодом.
Я создатель HTTP Toolkit; Я действительно построил это сам, чтобы решить ту же самую проблему для меня некоторое время назад! Я тоже пытался отладить интеграцию платежей, но их SDK не работал, я не мог сказать, почему, и мне нужно было знать, что на самом деле происходит, чтобы исправить это. Это очень расстраивает, но возможность видеть сырой трафик действительно помогает.
источник
Если вы используете Python 2.x, попробуйте установить программу открывания urllib2 . Это должно распечатать ваши заголовки, хотя вам, возможно, придется комбинировать это с другими открывателями, которые вы используете, чтобы поразить HTTPS.
источник
Опция
verbose
конфигурации может позволить вам увидеть, что вы хотите. Есть пример в документации .ПРИМЕЧАНИЕ. Прочтите комментарии ниже: подробные параметры конфигурации больше не доступны.
источник