首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将请求(python) cookie保存到文件中?

如何将请求(python) cookie保存到文件中?
EN

Stack Overflow用户
提问于 2012-10-23 20:09:08
回答 11查看 90.8K关注 0票数 59

如何在请求后使用库requests (python中的

代码语言:javascript
复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
bot = requests.session()
bot.get('http://google.com')

将所有cookies保存在一个文件中,然后从文件中恢复cookies。

EN

回答 11

Stack Overflow用户

发布于 2012-10-23 21:33:01

没有立即做到这一点的方法,但这并不难做到。

您可以从与session.cookies的会话中获取CookieJar对象,并使用pickle将其存储到文件中。

完整的示例:

代码语言:javascript
复制
import requests, pickle
session = requests.session()
# Make some calls
with open('somefile', 'wb') as f:
    pickle.dump(session.cookies, f)

然后加载:

代码语言:javascript
复制
session = requests.session()  # or an existing session

with open('somefile', 'rb') as f:
    session.cookies.update(pickle.load(f))

requests库使用requests.cookies.RequestsCookieJar() subclass,它显式地支持酸洗和类似于dict的API。RequestsCookieJar.update() method可用于使用从pickle文件加载的cookie更新现有的会话cookie jar。

票数 87
EN

Stack Overflow用户

发布于 2013-05-31 22:07:11

在像r = requests.get()这样的调用之后,r.cookies将返回一个RequestsCookieJar,您可以直接pickle该you,即

代码语言:javascript
复制
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))

如果您希望以人类可读的格式保存cookie,则必须做一些工作来将RequestsCookieJar提取到LWPCookieJar

代码语言:javascript
复制
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))
票数 35
EN

Stack Overflow用户

发布于 2014-09-16 07:50:49

扩展@Miracle2k的答案,请求Sessions是documented与任何cookielib CookieJar一起工作。LWPCookieJar (和MozillaCookieJar)可以将它们的cookie保存到文件或从文件加载它们的cookie。下面是一个完整的代码片段,它将为请求会话保存和加载cookie。ignore_discard参数用于使用httpbin进行测试,但您可能不希望在实际代码中包含它。

代码语言:javascript
复制
import os
from cookielib import LWPCookieJar

import requests


s = requests.Session()
s.cookies = LWPCookieJar('cookiejar')
if not os.path.exists('cookiejar'):
    # Create a new cookies file and set our Session's cookies
    print('setting cookies')
    s.cookies.save()
    r = s.get('http://httpbin.org/cookies/set?k1=v1&k2=v2')
else:
    # Load saved cookies from the file and use them in a request
    print('loading saved cookies')
    s.cookies.load(ignore_discard=True)
    r = s.get('http://httpbin.org/cookies')
print(r.text)
# Save the session's cookies back to the file
s.cookies.save(ignore_discard=True)
票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13030095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档