[python] 2025-03-17 圈点482
摘要:python保持session和cookies以及header带参数访问站点
设置session并取session示例,设置和取session的代码自己实现:
session = requests.Session() session.get('http://www.xoxxoo.com/session/setss/abc/123') response = session.get("http://www.xoxxoo.com/session") print(type(response)) # <class 'requests.models.Response'> print(response.text) # {"cookies":{"abc":"123"}}
在headers中带参数访问站点实例
s = requests.Session() s.auth = ('user', 'pass') s.headers.update({'x-test': 'true'}) # both 'x-test' and 'x-test2' are sent s.get('http://www.xoxxoo.com/headers', headers={'x-test2': 'true'})
任何传递给请求方法的字典都会与已设置会话层数据合并。方法层的参数覆盖会话的参数。
注意,就算使用了同一会话,方法级别的参数也不会被跨请求保持。下面的例子只会和第一个请求发送 cookie ,而非第二个:
s = requests.Session() r = s.get('http://www.xoxxoo.com/cookies', cookies={'from-my': 'browser'}) print(r.text) # '{"cookies": {"from-my": "browser"}}' r = s.get('http://www.xoxxoo.com/cookies') print(r.text) # '{"cookies": {}}'
所以如上方法可以是手动为会话添加 cookie,就使用 Cookie utility 函数 来操纵 Session.cookies。
会话还可以用作前后文管理器:
with requests.Session() as s: s.get('http://www.xoxxoo.com/cookies/set/sessioncookie/123456789')
这样就能确保 with 区块退出后会话能被关闭,即使发生了异常也一样
从字典参数中移除一个值有时会想省略字典参数中一些会话层的键。要做到这一点,只需简单地在方法层参数中将那个键的值设置为 None ,那个键就会被自动省略掉。