【问题标题】:Python Cookies questionPython Cookie 问题
【发布时间】:2010-10-29 13:26:55
【问题描述】:
import cgitb
import Cookie, urllib2
from cookielib import FileCookieJar
cgitb.enable()
c = Cookie.SmartCookie()
c['ini'] = 1
savedc = FileCookieJar()
savedc.add_cookie_header(c.output())
savedc.save()

这不应该保存cookie吗?...

我已经阅读了 100 万次 python 文档,我就是不明白:(

请帮助某人:(

【问题讨论】:

  • 为什么“FileCookieJar”后面没有“()”?
  • 嗨,我解决了这个问题,但它仍然不起作用?..

标签: python cookies cgi


【解决方案1】:

确保您将要存储 cookie 的文件命名为:

savedc = FileCookieJar('cookies.txt')

add_cookie_header 接受一个 Request 对象; set_cookie 接受一个 Cookie。正如它在文档中所说,FileCookieJar.save“引发 NotImplementedError。子类可能会导致此方法未实现。”猜猜你应该尝试阅读文档 1E6+1 次。

【讨论】:

  • 哎哟...关于文档的最后一句话听起来不太友好
  • 它似乎仍然没有保存?...当我打开和关闭 mozzila firefox 时,cookie 消失了?..
  • 如何将 cookie 保存到文件中? save 方法引发异常,程序停止并且没有包含 cookie 的文件。我是 Python 新手,不明白为什么这种方法会停止程序...
【解决方案2】:

Raf,我只能说,Egads!文档肯定清楚!我已经使用 Python 多年了,这个简单的 Stack Overflow 问题,我认为在开始一天的实际工作之前我会很快解决这个问题,我花了 20 多分钟来回答这个问题。 :-)

首先:事实证明“Cookie”库和“cookielib”库是完全独立的,彼此没有任何关系。文档中对此进行了说明,但您必须向下滚动到每个文档页面的“另请参阅”部分才能找到它。如果它位于每个页面的顶部,将会很有帮助。

因此,当您将“Cookie”库中的对象传递到“cookielib”时,您会混淆“cookielib”内部结构,因为它将 cookie 存储在字典中,并且“Cookie”cookie 看起来像 - 你猜怎么着! — 一个字典,因此“cookielib”将其混淆为它自己的内部数据结构之一,并将其​​他 cookie 保存在其中。结果我得到的错误是:

<type 'exceptions.AttributeError'>: 'str' object has no attribute 'discard'
  args = ("'str' object has no attribute 'discard'",)
  message = "'str' object has no attribute 'discard'" 

实际上,这是我在在 Cookie.Cookie 对象上粘贴一堆不属于那里的属性之后得到的错误,但是我在意识到自己陷入绝望之前添加了这些属性尝试使 Cookie.Cookie 表现得像 cookielib.Cookie 的任务。 :-) 早期的错误都是属性缺失错误,例如:

<class 'Cookie.CookieError'>: Invalid Attribute name
  args = ('Invalid Attribute name',)
  message = 'Invalid Attribute name' 

(我将错误放在这里,以防将来某个可怜的灵魂混淆了 Cookie 类并进行了我刚刚进行的 Google 搜索,但没有一个结果显示我遇到的错误!)

所以在我们继续之前,我必须知道:您是否试图像一个网络服务器一样,将 cookie 传递给客户端,并试图在客户端发送下一个请求时将它们原封不动地恢复原样,在这种情况下,我应该向您展示“Cookie”模块是如何工作的?或者您正在编写一个 Web 客户端,用于测试或娱乐,它与它通过 Web 请求发送到网站的 cookie 混淆,在这种情况下我们应该讨论“cookielib”?

【讨论】:

    猜你喜欢
    • 2011-06-06
    • 2010-10-01
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    • 2014-04-02
    • 2020-11-09
    • 2011-10-03
    相关资源
    最近更新 更多