1. 程式人生 > 實用技巧 >requests 傳送請求時 保持 headers 的順序

requests 傳送請求時 保持 headers 的順序

如題,在使用 requests 傳送 post 請求時保持 headers 的順序不變

問題來源於 http://match.yuanrenxue.com/match/3 這個網站
在抓包時發現每次獲取資料前都會發送一個 post 請求去獲取cookies

在模擬時卻發現怎麼都無法獲取cookies
通過 fiddler 檢視發現是 headers 的順序有問題,
通過 postman 調整 headers 的順序,模擬傳送請求,確定是 headers 順序的問題

問題定位

通過 fiddler 檢視發現可能是 headers 的順序有問題,
通過 postman 調整 headers 的順序,模擬傳送請求,確定是 headers 順序的問題

錯誤的響應

正確的響應

解決方案

import requests

url = "xxx"
headers = {
    "Host": "match.yuanrenxue.com",
    "Connection": "keep-alive",
    "Content-Length": "0",
    "Origin": "http://match.yuanrenxue.com",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36",
    "Accept": "*/*",
    "Referer": "http://match.yuanrenxue.com/match/3",
    "Accept-Encoding": "gzip, deflate",
    "Accept-Language": "zh-CN,zh;q=0.9",
}
# 先session
session=requests.Session()
# 後session clear,clear這個是比較關鍵的寫法。
session.headers.clear()
session.headers.update(
    headers
)
resp=session.post(url)

謹記

之前從未遇到過這個問題,