在urllib2.urlopen中使用mimetools.Message

时间:2011-05-14 01:21:44

标签: python urllib2

我正在使用urllib2.urlopen()

req = urllib2.Request('http://www.google.com')
resp = urllib2.urlopen(req)
print resp.info()

print resp.info()['set-cookie']

Date: Sat, 14 May 2011 01:24:12 GMT

Expires: -1

Cache-Control: private, max-age=0

Content-Type: text/html; charset=ISO-8859-1

Set-Cookie: PREF=ID=5ec78624283cc050:FF=0:TM=1305336252:LM=1305336252:S=eRXgUUuzhQbRmZxk; expires=Mon, 13-May-2013 01:24:12 GMT; path=/; domain=.google.com

Set-Cookie: NID=46=GxyZVeWbT9dn0sLa9waPGSusm1hFqGf46SPqewahg0bzbYIQX0oHff0bzJ33E2yO89npEsYkqSoX0HLSqHbCxj5tCK2E931PfEJbqDMB6lTDk4ngVAiiyObWmbHgRUC9; expires=Sun, 13-Nov-2011 01:24:12 GMT; path=/; domain=.google.com; HttpOnly

Server: gws

X-XSS-Protection: 1; mod


PREF=ID=5ec78624283cc050:FF=0:TM=1305336252:LM=1305336252:S=eRXgUUuzhQbRmZxk; expires=Mon, 13-May-2013 01:24:12 GMT; path=/; domain=.google.com, NID=46=GxyZVeWbT9dn0sLa9waPGSusm1hFqGf46SPqewahg0bzbYIQX0oHff0bzJ33E2yO89npEsYkqSoX0HLSqHbCxj5tCK2E931PfEJbqDMB6lTDk4ngVAiiyObWmbHgRUC9; expires=Sun, 13-Nov-2011 01:24:12 GMT; path=/; domain=.google.com; HttpOnly

正如您在响应中收到的标题中所看到的,有两个'set-cookie'语句,但是我收到的resp.info()对象中的两个语句将两个cookie语句组合在一起并将它们分隔为'' ,'(逗号)

这个分隔符分隔cookie很麻烦,因为cookie信息中有逗号,我试着用这个逗号分隔符分隔

是否有一种简单的方法可以使用此mimetools.message对象单独调用每个cookie字符串? (resp.info()

else->我只需要手动解析头文件,这不是那么有用的mimetools.message / dictionary对象

1 个答案:

答案 0 :(得分:3)

尝试使用getheaders()获取list个Cookie:

>>> msg = resp.info()
>>> msg.getheaders('Set-Cookie')
['PREF=ID=5975a5ee255f0949:FF=0:TM=1305336283:LM=1305336283:S=1vkES6eF4Yxd-_oM; expires=Mon, 13-May-2013 01:24:43 GMT; path=/; domain=.google.com.au', 'NID=46=lQVFZg6yKUsoWT529Hqp5gA8B_CKYd2epPIbANmw_J0UzeMt2BhuMF-gtmGsRhenUTeajKz2zILXd9xWpHWT8ZGvDcmNdkzaGX-L_-sKyY1w4e2l3DKd80JzSkt2Vp-H; expires=Sun, 13-Nov-2011 01:24:43 GMT; path=/; domain=.google.com.au; HttpOnly']

在这种情况下,您会得到两个list的{​​{1}}。

然后你可以迭代string并抓住你喜欢的任何一个cookie。 str.startswith()是你的朋友:

list

新手如何在Python中找到文档

>>> cookies = msg.getheaders('Set-Cookie')
>>> for cookie in cookies:
...     if cookie.startswith('PREF='):
...             print 'Got PREF: ', cookie
...     else:
...             print 'Got another: ', cookie
... 
Got PREF:  PREF=ID=5975a5ee255f0949:FF=0:TM=1305336283:LM=1305336283:S=1vkES6eF4Yxd-_oM; expires=Mon, 13-May-2013 01:24:43 GMT; path=/; domain=.google.com.au
Got another:  NID=46=lQVFZg6yKUsoWT529Hqp5gA8B_CKYd2epPIbANmw_J0UzeMt2BhuMF-gtmGsRhenUTeajKz2zILXd9xWpHWT8ZGvDcmNdkzaGX-L_-sKyY1w4e2l3DKd80JzSkt2Vp-H; expires=Sun, 13-Nov-2011 01:24:43 GMT; path=/; domain=.google.com.au; HttpOnly