[英]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.