一. 会话对象
1.1会话对象可以跨请求保持某些参数,
会话对象具有requests API的所有方法.
>>> import requests
>>> s = requests.Session()
>>> s.get("http://httpbin.org/cookies/set/sessioncookie/123456789")
<Response [200]>
>>> r = s.get("http://httpbin.org/cookies")
>>> r.text
'{\n "cookies": {\n "sessioncookie": "123456789"\n }\n}\n'
1.2 会话可以为请求方法提供缺省数据
>>> s = requests.Session()
>>> s.auth("user", "pass")
...因为没有真正验证登录, 所以会报错...
>>> s.headers.update({"x-test": "true"})
>>> s.get('http://httpbin.org/headers', headers={'x-test2': 'true'})
<Response [200]>
# 此时x-test 和x-test2 都会被放入请求头中
1.3 参数合并
传递给请求方法的字典都会与已设置的会话层数据合并. 方法层的参数覆盖会话的参数. 方法级别的参数不会被跨请求保持
>>> s = requests.Session()
>>> r = s.get('http://httpbin.org/cookies', cookies={'from-my': 'browser'})
>>> r.text
'{\n "cookies": {\n "from-my": "browser"\n }\n}\n'
>>> r = s.get('http://httpbin.org/cookies')
>>> r.text
'{\n "cookies": {}\n}\n'
>>>
1.4 建议使用的代码方式:上下文管理器
with requests.Session() as s:
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
# 若是在测试环境中, 不知道将来用get post,可以这么写
with requests.Session() as s:
resp = s.request(method="get|post", url=url)
# 不知道返回值是什么的情况下,可以通过content_type来判断返回值类型
content_type = ["application/json", "application/stream", "text/explain"]
未完待续…