Un método simple: habilitar el registro en versiones recientes de Solicitudes (1.xy superior).
Requests utiliza la configuración del módulo http.client
y logging
para 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 httplib
conimport requests.packages.urllib3.connectionpool as httplib
o use six yfrom six.moves import http_client as httplib
.requests
2.18.1 y Python 3, el registradorlogging.getLogger("requests.packages.urllib3")
no existe o no tiene ningún efecto.from http.client import HTTPConnection
r
Es una respuesta. Tiene un atributo de solicitud que tiene la información que necesita.r.request.headers
da los encabezados:Luego
r.request.data
tiene el cuerpo como un mapeo. Puedes convertir esto conurllib.urlencode
si lo prefieren:dependiendo del tipo de respuesta, el
.data
atributo puede faltar y en su lugar.body
habrá un atributo.fuente
response.request
parece ser unaPreparedRequest
en mi caso; no tiene.data
sino en su.body
lugar.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
verbose
opció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