最近工作中在使用python requests库时遇到一个问题,就是如何在session中设置对所有请求都生效的cookie?requests中的session对象一大特性就是它会自动为你管理cookie,当你登录一个页面时,它可以自动识别response中的set cookie头,然后为下面的请求一直维持这个cookie。不过我在使用的过程中,因为目标网站登录有验证码,所以打算每次运行时手动登录页面获取cookie,然后再把cookie写到代码变量中。这里遇到的问题就是当在get函数中传入cookie变量时,cookie只对当前的请求进行生效,下一次调用get还需要再传入一次cookie,否则发出去的请求是默认不会带有cookie的。
如下:
import requests
import time
mycookie = { "PHPSESSID":"56v9clgo1kdfo3q5q8ck0aaaaa" }
x = requests.session()
x.get("http://127.0.0.1:80",cookies = mycookie)
time.sleep(5)
x.get("http://127.0.0.1:80")
import requests
import time
mycookie = { "PHPSESSID":"56v9clgo1kdfo3q5q8ck0aaaaa" }
x = requests.session()
requests.utils.add_dict_to_cookiejar(x.cookies,{"PHPSESSID":"07et4ol1g7ttb0bnjmbiqjhp43"})
x.get("http://127.0.0.1:80",cookies = mycookie)
time.sleep(5)
x.get("http://127.0.0.1:80")
这样,通过requests.utils.add_dict_to_cookiejar对session对象设置cookie,之后所有的请求都会自动加上我自定义的cookie内容。
也可以通过requests.utils.
cookiejar_from_dict 先生成一个cookiejar对象,时候在赋值给session.cookies。貌似还可以使用session.cookies.set()或者update()。