簡體   English   中英

python-requests - 用戶代理被覆蓋

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

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