Metode sederhana: aktifkan masuk dalam versi terbaru dari Permintaan (1.x dan lebih tinggi.)
Permintaan menggunakan http.client
dan logging
konfigurasi modul untuk mengontrol verbositas logging, seperti dijelaskan di sini .
Demonstrasi
Kode dikutip dari dokumentasi tertaut:
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')
Contoh Output
$ 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
denganimport requests.packages.urllib3.connectionpool as httplib
atau gunakan enam danfrom six.moves import http_client as httplib
.requests
2.18.1 dan Python 3, loggerlogging.getLogger("requests.packages.urllib3")
tidak ada atau tidak berpengaruh.from http.client import HTTPConnection
r
adalah tanggapan. Ini memiliki atribut permintaan yang memiliki informasi yang Anda butuhkan.r.request.headers
memberi header:Kemudian
r.request.data
memiliki tubuh sebagai pemetaan. Anda dapat mengonversi ini denganurllib.urlencode
jika mereka lebih suka:tergantung pada jenis responsnya,
.data
-atribut mungkin tidak ada dan.body
-atribut ada di sana.sumber
response.request
sepertinya adaPreparedRequest
dalam kasus saya; tidak memiliki.data
tetapi.body
sebaliknya.response.url
(yang sedikit berbeda karena bukanresponse.request...
Anda dapat menggunakan HTTP Toolkit untuk melakukan hal ini.
Ini sangat berguna jika Anda perlu melakukan ini dengan cepat, tanpa perubahan kode: Anda dapat membuka terminal dari HTTP Toolkit, menjalankan kode Python dari sana seperti biasa, dan Anda akan dapat melihat konten lengkap dari setiap HTTP / HTTPS minta segera.
Ada versi gratis yang dapat melakukan semua yang Anda butuhkan, dan 100% open source.
Saya pencipta HTTP Toolkit; Saya benar-benar membangunnya sendiri untuk menyelesaikan masalah yang sama persis untuk saya beberapa waktu lalu! Saya juga mencoba men-debug integrasi pembayaran, tetapi SDK mereka tidak berfungsi, saya tidak tahu mengapa, dan saya perlu tahu apa yang sebenarnya terjadi untuk memperbaikinya dengan benar. Ini sangat membuat frustrasi, tetapi bisa melihat lalu lintas mentah sangat membantu.
sumber
Jika Anda menggunakan Python 2.x, coba instal pembuka urllib2 . Itu akan mencetak header Anda, meskipun Anda mungkin harus menggabungkannya dengan pembuka lain yang Anda gunakan untuk menekan HTTPS.
sumber
The
verbose
pilihan konfigurasi mungkin memungkinkan Anda untuk melihat apa yang Anda inginkan. Ada contoh dalam dokumentasi .CATATAN: Baca komentar di bawah ini: Opsi konfigurasi verbose tampaknya tidak tersedia lagi.
sumber