Python Cookies问题

时间:2009-05-28 11:49:15

标签: python cookies cgi

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吗?...

我一直在阅读python文档,就像100万次,我只是不明白:(

请帮助某人:(

2 个答案:

答案 0 :(得分:5)

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

首先:事实证明,“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类并且谷歌搜索我刚刚做了,没有一个出现任何我得到的错误的结果!)

因此,在我们继续前进之前,我必须知道:您是否尝试像网络服务器,向客户提供Cookie并在客户端发送下一个请求时尝试将其恢复原状,在这种情况下,我应该向您展示“Cookie”模块的工作原理?或者你正在编写一个网络客户端,用于测试或娱乐,它与网络请求发送到网站的cookie一起混乱,在这种情况下我们应该谈论“cookielib”?

答案 1 :(得分:0)

确保将文件命名为将Cookie存储在:

savedc = FileCookieJar('cookies.txt')

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