4

如何将 CookieJar 加载到新的 requests.Session 对象?

cj = cookielib.MozillaCookieJar("mycookies.txt")
s = requests.Session()

这是我创建的,现在会话将存储 cookie,但我希望它从文件中获取我的 cookie
(会话应该加载 cookieJar)。如何做到这一点?
我搜索了文档,但只能找到代码示例,它们从不加载 cookieJar,只是在一个会话期间保存 cookie。

4

3 回答 3

5

Python 3.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-05-31T05:41:01.537 回答
4

在 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 再次访问谷歌。

s.cookies.load()
s.get("https://google.com")
于 2020-02-13T15:41:48.743 回答
1

cookies=可以为requests.Session(以及请求)对象提供一个可选的:

饼干=无

一个 CookieJar,包含在此会话上设置的所有当前未完成的 cookie。默认情况下,它是 RequestsCookieJar,但可以是任何其他 cookielib.CookieJar 兼容对象。

见:https ://2.python-requests.org/en/latest/api/#requests.Session.cookies

所以它变成:

s = requests.Session(cookies=cj)

更新:正如mata在评论中正确指出的那样,我混淆了requests.get等... - cookies 是会话对象的属性,而不是 init 参数,所以这不起作用。s.cookies = cj 构建会话后将request.post

因此,使用:

s = requests.Session()
s.cookies = cj
于 2015-03-22T22:13:02.977 回答