metodo - noticias sobre python
¿Cómo puedo ver toda la solicitud HTTP que está siendo enviada por mi aplicación Python? (4)
La opción de configuración verbose
puede permitirle ver lo que quiere. Hay un ejemplo en la documentación .
NOTA: Lea los comentarios a continuación: las opciones de configuración detallada ya no parecen estar disponibles.
En mi caso, estoy usando la biblioteca de requests
para llamar a la API de PayPal a través de HTTPS. Desafortunadamente, recibo un error de PayPal y el soporte de PayPal no puede determinar cuál es el error o qué lo está causando. Quieren que "proporcione la solicitud completa, encabezados incluidos".
¿Cómo puedo hacer eso?
Si está utilizando Python 2.x, intente instalar un abridor urllib2 . Eso debería imprimir sus encabezados, aunque puede que tenga que combinar eso con otros abridores que está utilizando para golpear el HTTPS.
import urllib2
urllib2.install_opener(urllib2.build_opener(urllib2.HTTPHandler(debuglevel=1)))
urllib2.urlopen(url)
Un método simple: habilite el inicio de sesión en versiones recientes de Solicitudes (1.x y posteriores).
Las solicitudes utilizan la configuración del módulo http.client
y logging
para controlar la verbosidad del registro, como se describe here .
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'')
Ejemplo de salida
$ 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
r = requests.get(''https://api.github.com'', auth=(''user'', ''pass''))
r
es una respuesta. Tiene un atributo de solicitud que tiene la información que necesita.
r.request.allow_redirects r.request.headers r.request.response
r.request.auth r.request.hooks r.request.send
r.request.cert r.request.method r.request.sent
r.request.config r.request.params r.request.session
r.request.cookies r.request.path_url r.request.timeout
r.request.data r.request.prefetch r.request.url
r.request.deregister_hook r.request.proxies r.request.verify
r.request.files r.request.redirect
r.request.full_url r.request.register_hook
r.request.headers
da los encabezados:
{''Accept'': ''*/*'',
''Accept-Encoding'': ''identity, deflate, compress, gzip'',
''Authorization'': u''Basic dXNlcjpwYXNz'',
''User-Agent'': ''python-requests/0.12.1''}
Entonces r.request.data
tiene el cuerpo como un mapeo. Puede convertir esto con urllib.urlencode
si lo prefiere:
import urllib
b = r.request.data
encoded_body = urllib.urlencode(b)