Requests.Session() загружает файлы cookie из CookieJar

Как я могу загрузить CookieJar в новый объект request.Session?

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

Это то, что я создаю, теперь сеанс будет хранить куки, но я хочу, чтобы мои куки были из файла
(сеанс должен загрузить cookieJar). Как этого добиться?
Я просмотрел документацию, но смог найти только примеры кода, и они никогда не загружают cookieJar, а просто сохраняют файлы cookie в течение одного сеанса.


person Ranama    schedule 22.03.2015    source источник


Ответы (3)


Существует необязательный cookies=, который может быть предоставлен для объектов requests.Session (а также запроса):

файлы cookie = нет

CookieJar, содержащий все незавершенные файлы cookie, установленные в этом сеансе. По умолчанию это RequestsCookieJar, но может быть и любой другой объект, совместимый с cookielib.CookieJar.

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

Так становится:

s = requests.Session(cookies=cj)

Обновление: я путал requests.get, request.post и т. д., как правильно указал mata в комментариях — cookies — это атрибут объекта сеанса, а не параметр инициализации, поэтому это не сработает. s.cookies = cj после построения сеанса будет:

Поэтому используйте:

s = requests.Session()
s.cookies = cj
person Jon Clements♦    schedule 22.03.2015
comment
cookies — это атрибут объекта сеанса, а не параметр инициализации, поэтому это не сработает. s.cookies = cj после построения сессии будет. - person mata; 23.03.2015
comment
@mata ты абсолютно прав - спасибо за это - отредактировано - person Jon Clements♦; 23.03.2015
comment
Это больше не работает: TypeError: __init__() got an unexpected keyword argument 'cookies' - person BugHunterUK; 17.08.2016
comment
Я считаю, что критическое изменение задокументировано здесь: github.com /kennethreitz/requests/blob/ - person cisnjxqu; 15.04.2019

Код 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).
person Mitch McMabers    schedule 31.05.2020

В Питоне 3.x

import requests
import http.cookiejar

s = requests.Session()
s.cookies = http.cookiejar.MozillaCookieJar("anything.txt")

например, я получу доступ к сайту Google и сохраню файл cookiejar в файл something.txt.

s.get("https://google.com")
s.cookies.save()

И в будущем я снова захожу в Google с моим cookiejar.

s.cookies.load()
s.get("https://google.com")
person Karjok Pangesty    schedule 13.02.2020
comment
LWPCookieJar странный (непонятные файлы cookie в стиле Perl). Вместо этого большинству людей следует использовать MozillaCookieJar, который является стандартным для отрасли форматом cookie.txt. - person Mitch McMabers; 31.05.2020