httplib2,如何设置多个cookie?

时间:2009-11-15 17:42:56

标签: python cookies httplib2 cookiejar

您可能已经意识到,HTTP服务器通常会发送的不仅仅是session_id cookie;但是,httplib2使用字典处理cookie,如下所示:

response, content = http.request(url, 'GET', headers=headers)

headers = {'Cookie': response['set-cookie']}

url = 'http://www.example.com/home'   
response, content = http.request(url, 'GET', headers=headers)

那么,我该如何设置额外的cookie?如果用字典处理,我不能有双Cookie键:S。

感谢您的时间。

4 个答案:

答案 0 :(得分:5)

Cookie包含在一个HTTP标头中,以分号分隔。例如:

cookie1=value1;cookie2=value2

因此,您需要根据服务器发送的cookie构建字符串,然后将其设置为Cookie标题。

编辑:实际上,在httplib2上玩一下并重新阅读你的问题,我不确定你是否真的需要做任何事来获得你想要的功能。从httplib2返回的set-cookie值实际上是从服务器发送的原始Set-Cookie标头;你可以把它放到新响应的cookie标题中,一切都会正常工作。从技术上讲,你应该删除一些cookie属性,例如expiry,但我想大多数服务器都会处理这个问题。

答案 1 :(得分:3)

是的,我在发出请求时只是在其他地方发现了Cookie标头,但服务器可能会发送多个Set-Cookie标头,每个标头都有一个cookie(以及过期,域等属性)。但是使用httplib2中使用的字典系统,我无法真正获得服务器发送的所有可能的Set-Cookie标头,但看起来只是最后一个。

那么,还有更多的想法:)?

答案 2 :(得分:2)

做一些额外的测试,用虚拟的setcookie()PHP页面,我在3个测试中生成,下面是一组标题:

Set-Cookie: chocolate=chips
Set-Cookie: milk=shape


Set-Cookie: chocolate=chips; expires=Sun, 15-Nov-2009 18:47:08 GMT; path=/; domain=thaorius.net; secure; httponly
Set-Cookie: milk=shape


Set-Cookie: chocolate=chips; expires=Sun, 15-Nov-2009 18:46:25 GMT
Set-Cookie: milk=shape

httplib2实际上在数组的set-cookie键上提供的输出,分别对于每个标题对,这个:

chocolate=chips, milk=shape

chocolate=chips; expires=Sun, 15-Nov-2009 18:31:00 GMT; path=/; domain=thaorius.net; secure; httponly, milk=shape

chocolate=chips; expires=Sun, 15-Nov-2009 18:38:21 GMT, milk=shape

所以似乎httplib2确实正确处理了问题,但现在我遇到了另一个问题。 expires属性中的“,”。如您所见,cookie以逗号分隔,但如何区分expires属性。

我可以用逗号分隔字符串,然后用“;”分隔字符串,最后得到每个cookie的键值对,简单易行;但是在逗号过期时,我不可能这样做。

所以,我在想,我可以使用一个正则表达式,它基本上寻找“expires = letters,num& letters nums:nums:nums arbitrarychars [,|; | $]”并替换为expires = STUB,因为我并不关心cookie的到期时间。

那么,有人会非常友好地给我一个我可以提供给re.sub()的正则表达式吗?到目前为止我还没有真正需要正则表达式,因此我还没有学习它们,而且我真的不想为一个单独的一天放松一下:)。

答案 3 :(得分:-2)

试试这个:

pp = re.compile('(Sun|Mon|Tue|Wed|Thu|Fri|Sat),')
pp.sub('','alpha Sun, beta')
'alpha  beta'