簡體   English   中英

Python 請求重定向到 GET 而不是 POST

[英]Python requests redirect to GET instead of POST

我正在嘗試調用 REST API 的 url,對於該 API,GET 和 POST 請求都是可能的。 我想發送一個 POST 請求。 如果我通過 ThunderClient 插件運行我的請求,一切正常。 我可以發送 POST 請求並獲取正確的數據。

如果我像這樣在 python 中發送我的請求:

    import requests
    response = requests.post(
        url,
        data=payload,
        verify=certificate,
    )

    pprint(response.request)

它將打印<PreparedRequest [GET]> 請求庫重定向發送一個 GET,我將得到相應的 GET 響應。

如果我設置allow_redirects=False

    import requests
    response = requests.post(
        url,
        data=payload,
        allow_redirects=False,
        verify=certificate,
    )

    pprint(response.request)

它將打印<PreparedRequest [POST]> ,但我得到一個空的response.text和這個標題:

{'Cache-Control': 'no-cache', 'Content-length': '0', 'Location': '...url...', 'Connection': 'close'}

和狀態代碼 302。

我通過 ThunderClient 發送 POST 請求時沒有這個問題。 我只是得到了預期的數據。

我在這里做錯了什么? 如何確保發送 POST 請求?

狀態 302 的確切行為是實現定義的。

302 Found(以前稱為“暫時移動”)告訴客戶端查看(瀏覽到)另一個 URL。 HTTP/1.0 規范 (RFC 1945) 要求客戶端使用相同的方法執行臨時重定向(最初的描述短語是“臨時移動”),[11] 但流行的瀏覽器通過將方法更改為 GET 來實現 302 重定向。 因此,HTTP/1.1 增加了狀態碼 303 和 307 來區分這兩種行為。 [10]

https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#3xx_redirection

有可能某些實現使用 GET 重定向,而其他實現使用 POST(原始方法)重定向。 對 GET 使用狀態 303,對原始方法使用狀態 307。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM