python请求-正在重写用户代理

2024-04-29 10:05:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有

    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'被重写?我错过了什么?


Tags: fromapiurlmozillalangusernamepasswordrequests
2条回答

如果希望会话对所有请求使用特定的头,则需要在会话上显式设置这些头:

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)行将字典添加到会话头。

会话从不从请求复制信息以供其他请求重用。只有来自响应(特别是cookies)的信息才会被捕获以供重用。

有关详细信息,请参见^{} Session Objects documentation

Sessions can also be used to provide default data to the request methods. This is done by providing data to the properties on a Session object.

headers不以这种方式保存在session中。

您需要在每次发出请求时显式地传递它们,或者设置一次^{}

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)

另请参见^{} class是如何实现的-每次您对会话对象设置请求it merges the ^{} with ^{}时:

headers=merge_setting(request.headers, self.headers, dict_class=CaseInsensitiveDict),

相关问题 更多 >