在Python中获取所有Cookies

20

如何在 Python 中读取所有 cookie,而不知道其名称?


4
当你说“read them back”时,你是指a)从HTTP响应中读取它们,还是b)从CookieJar中读取它们?或者有另一种(c)解释吗? - Jarret Hardie
还有一个(c) :) c_1) 有人可能会问关于他的Python会话cookie的问题...例如,如果Python脚本是一个.cgi(有关此内容,请参见由Matt Lacey提供的os.environ ['HTTP_COOKIE']答案,具体取决于用于提供cgi的Web服务器)c_2) 如果它是在jupyter中运行的笔记本电脑(Web服务器是tornado),同样的问题。 - ntg
4个回答

24

不确定这是否是您要寻找的,但以下是一个简单的示例,在其中将cookie放入cookiejar并读取它们:

from urllib2 import Request, build_opener, HTTPCookieProcessor, HTTPHandler
import cookielib

#Create a CookieJar object to hold the cookies
cj = cookielib.CookieJar()
#Create an opener to open pages using the http protocol and to process cookies.
opener = build_opener(HTTPCookieProcessor(cj), HTTPHandler())

#create a request object to be used to get the page.
req = Request("http://www.about.com")
f = opener.open(req)

#see the first few lines of the page
html = f.read()
print html[:50]

#Check out the cookies
print "the cookies are: "
for cookie in cj:
    print cookie

1
如果我得到的 cookie 是 <Cookie _b="AQYJuqIEi9xHvY1vHG9i6bkSgQNv8b0/04YaLTPf4J0t4fOpb33Gr63a3y+nC6H2I0Y=" for .google.com/>,那么我如何获取 _b 部分呢?使用 cookie["_b"] 似乎不起作用。 - Shane

6
os.environ ['HTTP_COOKIE']放入数组中:
#!/usr/bin/env python

import os

 if 'HTTP_COOKIE' in os.environ:
  cookies = os.environ['HTTP_COOKIE']
  cookies = cookies.split('; ')
  handler = {}

  for cookie in cookies:
   cookie = cookie.split('=')
   handler[cookie[0]] = cookie[1]

那太好了,正是我需要的,但是没有HTTP_COOKIE...我正在使用jupyter...(这意味着Tornado),它在哪里存储cookies? - ntg

5
这可能正是您所需要的东西。
Python 3.4
import requests

r = requests.get('http://www.about.com/')
c = r.cookies
i = c.items()

for name, value in i:
    print(name, value)

4

查看您获取的HTTP响应中的Cookie:头,使用标准库中的Cookie模块解析其内容。


1
你如何查看HTTP响应中的cookie?这取决于你如何获取该响应,例如urllib.urlretrieve返回一个包含2个项目的元组,第二个是带有元数据的httplib.HTTPMessage;如果你喜欢使用urllib.urlopen,则可以通过在urlopen返回的伪文件对象上调用.info()来获取HTTPMessage;等等。 - Alex Martelli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接