如何将CookieJar加载到新的requests.Session对象?
cj = cookielib.MozillaCookieJar("mycookies.txt")
s = requests.Session()
这是我创建的,现在会话将存储cookie,但我希望它具有来自文件的cookie
(会话应加载cookieJar)。如何才能做到这一点?
我搜索了文档,但我只能找到代码示例,它们永远不会加载cookieJar,只是在一个会话期间保存cookie。
发布于 2015-03-23 06:13:03
可以为requests.Session
(以及请求)对象提供一个可选的cookies=
:
=无cookie
包含此会话上设置的所有当前未完成cookies的CookieJar。默认情况下,它是一个RequestsCookieJar,但可以是任何其他与cookielib.CookieJar兼容的对象。
请参阅:https://2.python-requests.org/en/latest/api/#requests.Session.cookies
所以它变成了:
s = requests.Session(cookies=cj)
cookies更新:我混淆了requests.get
、request.post
等,正如mata在注释中正确指出的那样-cookie是会话对象的属性,而不是初始化参数,所以这将不起作用。s.cookies = cj构建会话后将
因此,请使用:作为
s = requests.Session()
s.cookies = cj
发布于 2020-05-31 13:41:02
Python3.x代码,功能齐全且实现良好的示例。代码不言自明。
这段代码正确地处理“会话cookie”,并在两次运行之间保留它们。默认情况下,这些文件不会保存到磁盘,这意味着大多数网站会要求您在两次运行之间不断登录。但是使用下面的技术,所有的会话cookie也会被保留!
这就是您要查找的代码。
import os
import pathlib
import requests
from http.cookiejar import MozillaCookieJar
cookiesFile = str(pathlib.Path(__file__).parent.absolute() / "cookies.txt") # Places "cookies.txt" next to the script file.
cj = MozillaCookieJar(cookiesFile)
if os.path.exists(cookiesFile): # Only attempt to load if the cookie file exists.
cj.load(ignore_discard=True, ignore_expires=True) # Loads session cookies too (expirydate=0).
s = requests.Session()
s.headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36",
"Accept-Language": "en-US,en"
}
s.cookies = cj # Tell Requests session to use the cookiejar.
# DO STUFF HERE WHICH REQUIRES THE PERSISTENT COOKIES...
s.get("https://www.somewebsite.com/")
cj.save(ignore_discard=True, ignore_expires=True) # Saves session cookies too (expirydate=0).
发布于 2020-02-13 23:41:49
在Python 3.x中
import requests
import http.cookiejar
s = requests.Session()
s.cookies = http.cookiejar.MozillaCookieJar("anything.txt")
例如,我将访问谷歌网站并将cookiejar保存到文件"anything.txt“中。
s.get("https://google.com")
s.cookies.save()
将来,我会用我的cookiejar再次访问google。
s.cookies.load()
s.get("https://google.com")
https://stackoverflow.com/questions/29200357
复制相似问题