您可能已经意识到,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。
感谢您的时间。
答案 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'