如何在requests session中手动设置cookie

最近工作中在使用python requests库时遇到一个问题,就是如何在session中设置对所有请求都生效的cookie?requests中的session对象一大特性就是它会自动为你管理cookie,当你登录一个页面时,它可以自动识别response中的set cookie头,然后为下面的请求一直维持这个cookie。不过我在使用的过程中,因为目标网站登录有验证码,所以打算每次运行时手动登录页面获取cookie,然后再把cookie写到代码变量中。这里遇到的问题就是当在get函数中传入cookie变量时,cookie只对当前的请求进行生效,下一次调用get还需要再传入一次cookie,否则发出去的请求是默认不会带有cookie的。

如下:

 
  1. import requests

  2. import time

  3.  
  4. mycookie = { "PHPSESSID":"56v9clgo1kdfo3q5q8ck0aaaaa" }

  5. x = requests.session()

  6. x.get("http://127.0.0.1:80",cookies = mycookie)

  7. time.sleep(5)

  8. x.get("http://127.0.0.1:80")


运行脚本后,通过抓包发现,第一次get请求的中含有我自定义的cookie,第二次请求中却没有。因为我要对很多http接口发送请求,所以如果在每个get里面都加入一个cookie变量的话,写起来就有些麻烦了。于是google了一下,找到了如下的解决方法:

 
  1. import requests

  2. import time

  3.  
  4. mycookie = { "PHPSESSID":"56v9clgo1kdfo3q5q8ck0aaaaa" }

  5. x = requests.session()

  6. requests.utils.add_dict_to_cookiejar(x.cookies,{"PHPSESSID":"07et4ol1g7ttb0bnjmbiqjhp43"})

  7. x.get("http://127.0.0.1:80",cookies = mycookie)

  8. time.sleep(5)

  9. 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()。

session 添加headers 的方法:

session.headers.update(headers)     #添加headers

猜你喜欢

转载自blog.csdn.net/qq_34246164/article/details/81610896