don*_*yor 8 python python-requests
我有
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)
Run Code Online (Sandbox Code Playgroud)
我被拒绝但是因为403被禁止了.我打印了标题,我得到:
..'User-Agent': 'python-requests/2.2.1 CPython/2.7.5 Windows/7'..
Run Code Online (Sandbox Code Playgroud)
为什么我会'User-Agent': 'Mozilla/5.0'被覆盖?我在这里想念的是什么?
headers 没有以这种方式保持在会话中.
您需要在每次发出请求时显式传递它们,或者设置s.headers一次:
with requests.Session() as s:
s.headers = {'User-Agent': 'Mozilla/5.0'}
Run Code Online (Sandbox Code Playgroud)
您可以通过检查检查是否发送了正确的标头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)
Run Code Online (Sandbox Code Playgroud)
另请参阅如何Session类实现-每次你犯了一个请求,它融合了request.headers与headers你会话对象上设置:
headers=merge_setting(request.headers, self.headers, dict_class=CaseInsensitiveDict),
Run Code Online (Sandbox Code Playgroud)
如果您希望会话对所有请求使用特定标头,则需要在会话上明确设置这些标头:
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)
Run Code Online (Sandbox Code Playgroud)
该s.headers.update(headers)行将您的字典添加到会话标题中。
会话永远不会从请求中复制信息以重用于其他请求。仅捕获来自响应(特别是 cookie)的信息以供重用。
有关更多详细信息,请参阅requests 会话对象文档:
会话还可用于向请求方法提供默认数据。这是通过向 Session 对象上的属性提供数据来完成的。
| 归档时间: |
|
| 查看次数: |
8012 次 |
| 最近记录: |