Un método simple: habilitar el registro en versiones recientes de Solicitudes (1.xy superior).
Requests utiliza la configuración del módulo http.clienty loggingpara controlar la verbosidad del registro, como se describe aquí .
Demostración
Código extraído de la documentación vinculada:
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')
Salida de ejemplo
$ 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 httplibconimport requests.packages.urllib3.connectionpool as httplibo use six yfrom six.moves import http_client as httplib.requests2.18.1 y Python 3, el registradorlogging.getLogger("requests.packages.urllib3")no existe o no tiene ningún efecto.from http.client import HTTPConnectionrEs una respuesta. Tiene un atributo de solicitud que tiene la información que necesita.r.request.headersda los encabezados:Luego
r.request.datatiene el cuerpo como un mapeo. Puedes convertir esto conurllib.urlencodesi lo prefieren:dependiendo del tipo de respuesta, el
.dataatributo puede faltar y en su lugar.bodyhabrá un atributo.fuente
response.requestparece ser unaPreparedRequesten mi caso; no tiene.datasino en su.bodylugar.response.url(que es un poco diferente en que no lo es)response.request...Puede usar HTTP Toolkit para hacer exactamente esto.
Es especialmente útil si necesita hacer esto rápidamente, sin cambios de código: puede abrir un terminal desde HTTP Toolkit, ejecutar cualquier código de Python desde allí de manera normal, y podrá ver el contenido completo de cada HTTP / HTTPS Solicitar de inmediato.
Hay una versión gratuita que puede hacer todo lo que necesita, y es 100% de código abierto.
Soy el creador de HTTP Toolkit; ¡Realmente lo construí yo mismo para resolver exactamente el mismo problema para mí hace un tiempo! Yo también estaba tratando de depurar una integración de pago, pero su SDK no funcionaba, no podía decir por qué, y necesitaba saber qué estaba pasando para solucionarlo correctamente. Es muy frustrante, pero poder ver el tráfico sin procesar realmente ayuda.
fuente
Si está utilizando Python 2.x, intente instalar un abridor urllib2 . Eso debería imprimir sus encabezados, aunque es posible que tenga que combinar eso con otros abridores que está utilizando para golpear el HTTPS.
fuente
La
verboseopción de configuración puede permitirle ver lo que desea. Hay un ejemplo en la documentación .NOTA: Lea los comentarios a continuación: Las opciones de configuración detalladas ya no parecen estar disponibles.
fuente