Po zakończeniu rozmowy, takie jak r = requests.get()
, r.cookies
zwróci RequestsCookieJar
które można bezpośrednio pickle
, tj
import pickle
def save_cookies(requests_cookiejar, filename):
with open(filename, 'wb') as f:
pickle.dump(requests_cookiejar, f)
def load_cookies(filename):
with open(filename, 'rb') as f:
return pickle.load(f)
#save cookies
r = requests.get(url)
save_cookies(r.cookies, filename)
#load cookies and do a request
requests.get(url, cookies=load_cookies(filename))
Jeśli chcesz zachowaj pliki cookie w formacie czytelnym dla człowieka, musisz wykonać pewne czynności, aby wyodrębnić plik RequestsCookieJar
do LWPCookieJar
.
import cookielib
def save_cookies_lwp(cookiejar, filename):
lwp_cookiejar = cookielib.LWPCookieJar()
for c in cookiejar:
args = dict(vars(c).items())
args['rest'] = args['_rest']
del args['_rest']
c = cookielib.Cookie(**args)
lwp_cookiejar.set_cookie(c)
lwp_cookiejar.save(filename, ignore_discard=True)
def load_cookies_from_lwp(filename):
lwp_cookiejar = cookielib.LWPCookieJar()
lwp_cookiejar.load(filename, ignore_discard=True)
return lwp_cookiejar
#save human-readable
r = requests.get(url)
save_cookies_lwp(r.cookies, filename)
#you can pass a LWPCookieJar directly to requests
requests.get(url, cookies=load_cookies_from_lwp(filename))
Wydaje się, że nie ma 'cookies' argumentem kluczowych w najnowszej wersji wniosków. Zamiast tego wystarczy utworzyć obiekt sesji i ustawić właściwość 'cookie' na obiekt' cookiejar'. – kavinyao
@kavinyao Czy jesteś tego pewien? Nadal jest w dokumentacji (http://docs.python-requests.org/en/latest/api/#requests.Session.cookies). – madjar
'Session' nadal ma właściwość' cookies', ale metoda '__init__' [nie przyjmuje argumentów słów kluczowych] (https://github.com/kennethreitz/requests/blob/master/requests/sessions.py#L205). – kavinyao