![](/img/trans.png)
[英]Python requests - 403 forbidden - despite setting `User-Agent` headers
[英]python-requests - user-agent is being overriden
我有
logindata = {
'username': 'me',
'password': 'blbla'
}
payload = {'from':'me', 'lang':'en', 'url':csv_url}
headers = {
'User-Agent': 'Mozilla/5.0'
}
api_url = 'http://dev.mypage.com/admin/app/import/'
with requests.Session() as s:
s.post(api_url, data=json.dumps(logindata), headers=headers)
print s.headers
# An authorised request.
r = s.get(api_url, params=payload, headers=headers)
我被拒絕了,但這是因為 403 被禁止。 我打印了標題,我得到:
..'User-Agent': 'python-requests/2.2.1 CPython/2.7.5 Windows/7'..
為什么我的'User-Agent': 'Mozilla/5.0'
被覆蓋? 我在這里錯過了什么?
headers
不會以這種方式保存在會話中。
您需要在每次發出請求時明確傳遞它們,或者設置s.headers
一次:
with requests.Session() as s:
s.headers = {'User-Agent': 'Mozilla/5.0'}
您可以通過檢查response.request.headers
來檢查是否發送了正確的標頭:
with requests.Session() as s:
s.headers = {'User-Agent': 'Mozilla/5.0'}
r = s.post(api_url, data=json.dumps(logindata))
print(r.request.headers)
另請參閱Session
類是如何實現的 - 每次發出請求時, 它都會將request.headers
與您在會話對象上設置的headers
合並:
headers=merge_setting(request.headers, self.headers, dict_class=CaseInsensitiveDict),
如果您希望會話對所有請求使用特定標頭,則需要在會話上明確設置這些標頭:
with requests.Session() as s:
s.headers.update(headers)
s.post(api_url, data=json.dumps(logindata))
# An authorised request.
r = s.get(api_url, params=payload)
s.headers.update(headers)
行將您的字典添加到會話標題中。
會話永遠不會從請求中復制信息以重用於其他請求。 僅捕獲來自響應(特別是 cookie)的信息以供重用。
有關更多詳細信息,請參閱requests
會話對象文檔:
會話還可用於向請求方法提供默認數據。 這是通過向 Session 對象上的屬性提供數據來完成的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.