当前位置: 首页 > 知识库问答 >
问题:

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

南门正业
2023-03-14

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

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
bot = requests.session()
bot.get('http://google.com')

将所有cookie保存在文件中,然后从文件中还原cookie。

共有3个答案

范侯林
2023-03-14

在@奇迹2k的答案上扩展,请求会话被记录为与任何CookielibCookieJar一起工作。LWPCookieJar(和MozillaCookieJar)可以在文件中保存和加载它们的cookie。下面是一个完整的代码片段,它将为请求会话保存和加载cookie。ignore_discard参数用于在测试中使用http://code>参数,但您可能不想将其包含在实际代码中。

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)
华欣怡
2023-03-14

在调用后,例如r=请求。get()r.cookies将返回一个requestScookejar,您可以直接pickle,即。

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,您必须做一些工作来提取ResestsCookieJarLWPCookieJar

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))
慕阳
2023-03-14

没有直接的方法可以做到这一点,但也不难做到。

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

一个完整的例子:

import requests, pickle
session = requests.session()
# Make some calls
with open('somefile', 'wb') as f:
    pickle.dump(session.cookies, f)

然后加载:

session = requests.session()  # or an existing session

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

请求库使用requests.cookies.刚需CookieJar()子类,该子类明确支持酸洗和类似判决的API。方法可以用于使用从泡菜文件加载的cookie更新现有会话cookie jar。

 类似资料:
  • 问题内容: 我想将HtmlUnit cookie保存到一个文件,然后在下一次运行时从该文件中加载它们。我怎样才能做到这一点?谢谢。 问题答案:

  • 我有一个spring cloud sleuth(Hoxton.SR3)的spring boot(2.2.5.RELEASE)项目。我想向控制器发送一个包含一个标头的请求,并将此标头设置为: 在控制器的跨度包中填充(即) 保存到MDC 我有一个自定义的 当返回从我的配置文件中读取的行李钥匙列表。 我还在应用程序中定义了。yml: 当我(通过邮递员)用带有“行李代理请求时间”和“值”(即) 问题 我需

  • 问题内容: 我知道获取网址非常简单,我可以获取原始响应正文并将其保存到文件中,但是对于大型文件,是否可以直接流式传输到文件?就像我要下载电影或类似的东西吗? 问题答案: 奇怪的是,请求没有什么简单的方法。您必须遍历响应并将这些块写入文件: 我通常只是使用。它可以工作,但是如果您需要使用会话或某种身份验证,那么上面的代码也可以工作。

  • 问题内容: 我使用请求库从网站上获取了一些cookie,但是我只能从响应中获取cookie,如何从请求中获取cookie?谢谢! 问题答案: 或者,您可以在请求之前和之后使用和观察:

  • 问题内容: 我正在尝试访问网站,但无法将收集到的“ Cookie”添加到传出的POST请求标头中。我已经能够验证它们是否存在于CookieManager中。 HtmlUnit的任何替代方法也将不胜感激。 问题答案: 我发现可以使用WebClient中的setadditionalHeader()添加标题。