Python リクエスト - http リクエスト全体 (raw) を印刷しますか? 質問する

Python リクエスト - http リクエスト全体 (raw) を印刷しますか? 質問する

使用中requestsモジュール生の HTTP リクエストを印刷する方法はありますか?

必要なのはヘッダーだけではなく、リクエスト ライン、ヘッダー、コンテンツのプリントアウトです。HTTP リクエストから最終的に何が構築されるかを確認することは可能ですか?

ベストアンサー1

v1.2.3以降リクエストに PreparedRequest オブジェクトが追加されました。ドキュメントによると、「サーバーに送信される正確なバイトが含まれています」。

これを使用して、次のようにリクエストをきれいに印刷することができます。

import requests

req = requests.Request('POST','http://stackoverflow.com',headers={'X-Custom':'Test'},data='a=1&b=2')
prepared = req.prepare()

def pretty_print_POST(req):
    """
    At this point it is completely built and ready
    to be fired; it is "prepared".

    However pay attention at the formatting used in 
    this function because it is programmed to be pretty 
    printed and may differ from the actual request.
    """
    print('{}\n{}\r\n{}\r\n\r\n{}'.format(
        '-----------START-----------',
        req.method + ' ' + req.url,
        '\r\n'.join('{}: {}'.format(k, v) for k, v in req.headers.items()),
        req.body,
    ))

pretty_print_POST(prepared)

これにより、次のようになります。

-----------START-----------
POST http://stackoverflow.com/
Content-Length: 7
X-Custom: Test

a=1&b=2

次に、実際のリクエストを次のように送信します。

s = requests.Session()
s.send(prepared)

これらのリンクは利用可能な最新のドキュメントへのリンクであるため、内容が変更される場合があります。上級 - 準備されたリクエストそしてAPI - 下位レベルクラス

おすすめ記事