当前位置: 首页 > 面试题库 >

在Python请求中使用cookies.txt文件

倪子晋
2023-03-14
问题内容

我正在尝试使用cookies.txt带有Python请求的文件(使用Chrome扩展程序生成)访问经过身份验证的网站:

import requests, cookielib

cj = cookielib.MozillaCookieJar('cookies.txt')
cj.load()
r = requests.get(url, cookies=cj)

它不会引发任何错误或异常,但是会错误地显示登录屏幕。但是,我知道我的cookie文件是有效的,因为我可以通过使用它成功地检索我的内容wget。知道我在做什么错吗?

编辑:

我跟踪cookielib.MozillaCookieJar._really_load,并且可以验证cookie被正确解析(即他们的正确的价值观domainpathsecure等标记)。但是由于事务仍在生成登录表单,因此似乎wget必须做其他事情(因为完全相同的cookies.txt文件适用于它)。


问题答案:

MozillaCookieJar继承自FileCookieJar其构造函数中的以下docstring:

Cookies are NOT loaded from the named file until either the .load() or
.revert() method is called.

然后,您需要调用.load()方法。

同样,就像Jermaine Xu一样,文件的第一行需要包含# Netscape HTTP Cookie File# HTTP Cookie File字符串。您使用的插件生成的文件不包含这样的字符串,因此您必须自己插入它。我在http://code.google.com/p/cookie-
txt-export/issues/detail?id=5上
提出了适当的错误

编辑

会话cookie在第5列中保存为0。如果您不ignore_expires=True使用load()方法,则从文件加载时将丢弃所有此类cookie。

档案session_cookie.txt

# Netscape HTTP Cookie File
.domain.com TRUE    /   FALSE   0   name    value

Python脚本:

import cookielib

cj = cookielib.MozillaCookieJar('session_cookie.txt')
cj.load()
print len(cj)

输出: 0

编辑2

虽然我们设法饼干放进瓶子上面,他们随后被丢弃的cookielib,因为他们仍然有0在价值expires属性。为了避免这种情况,我们必须将到期时间设置为将来的某个时间,如下所示:

for cookie in cj:
    # set cookie expire date to 14 days from now
    cookie.expires = time.time() + 14 * 24 * 3600

编辑3

我同时检查了wget和curl,并都使用了0过期时间来表示会话cookie,这意味着这是事实上的标准。但是,Python的实现出于相同目的使用空字符串,因此引发了问题。我认为Python在这方面的行为应与wget和curl的行为保持一致,这就是为什么我在http://bugs.python.org/issue17164引发该错误的原因,
我会注意到0在第5栏中用空字符串替换s输入文件并传递ignore_discard=Trueload()是解决问题的另一种方法(在这种情况下,无需更改有效时间)。



 类似资料:
  • 问题内容: 请求是一个非常不错的库。我想用它来下载大文件。问题是不可能将整个文件保留在内存中,我需要分块读取它。这是以下代码的问题 由于某种原因,它无法按这种方式工作。仍将响应加载到内存中,然后再将其保存到文件中。 更新 如果你需要一个小型客户端,可以从FTP下载大文件,则可以在此处找到它。它支持多线程和重新连接(它确实监视连接),还可以为下载任务调整套接字参数。 问题答案: 使用以下流代码,无论

  • 问题内容: 我需要进行API调用,以上传文件以及带有有关文件详细信息的JSON字符串。 我正在尝试使用python请求库来执行此操作: 这将引发以下错误: 如果我从请求中删除“文件”,则它可以工作。 如果我从请求中删除了“数据”,它将起作用。 如果我不将数据编码为JSON,则可以使用。 因此,我认为错误与在同一请求中发送JSON数据和文件有关。 关于如何使它工作的任何想法? 问题答案: 不要使用j

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

  • 我正在执行使用Python请求库上传文件的简单任务。我搜索了Stack Overflow,似乎没有人遇到同样的问题,即服务器无法接收文件: 我正在用我的文件名填充upload_file关键字的值,因为如果我把它留空,它会说 现在我得到了 只有当文件为空时才会显示。所以我一直在思考如何成功地发送文件。我知道这个文件是有效的,因为如果我去这个网站手动填写表单,它会返回一个匹配对象的列表,这就是我想要的

  • 问题内容: 是否可以使用Python的库发送SOAP请求? 问题答案: 确实有可能。 这是一个使用普通请求lib调用Weather SOAP Service的示例: 一些注意事项: 标头很重要。没有正确的标头,大多数SOAP请求将无法工作。可能是更 正确 使用的标头(但weatherservice更喜欢 这将以xml字符串形式返回响应-然后,您需要解析该xml。 为简单起见,我以纯文本形式包含了该

  • 问题内容: 我在Node.js中使用POST请求上传文件时遇到问题。我必须使用模块来完成该操作(无需外部npms)。服务器需要它是包含文件数据字段的多部分请求。看起来很容易,但不使用任何外部模块就很难在Node.js中完成。 我尝试使用此示例,但未成功: 问题答案: 看起来您已经在使用module了。 在这种情况下,您需要发布的只是使用其功能: 但是,如果您想从文件系统中发布一些现有文件,则可以简