如何在Python 3中使用Cookie?

Yon*_*eng 5 python python-3.x

我想使用从Chrome浏览器复制的Cookie,但会出错。

import urllib.request
import  re

def  open_url(url):
header={"User-Agent":r'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'}
Cookies={'Cookie':r"xxxxx"}
Request=urllib.request.Request(url=url,headers=Cookies)
response=urllib.request.urlopen(Request,timeout=100)
return  response.read().decode("utf-8")
Run Code Online (Sandbox Code Playgroud)

我的代码在哪里出错?那是headers = Cookies吗?

Ser*_*sta 5

使用 urllib.request 时的正确方法是使用OpenerDirector填充有CookieProcessor

cookieProcessor = urllib.request.HTTPCookieProcessor()
opener = urllib.request.build_opener(cookieProcessor)
Run Code Online (Sandbox Code Playgroud)

然后你使用它opener,它会自动处理cookie:

response = opener.open(request,timeout=100)
Run Code Online (Sandbox Code Playgroud)

默认情况下,CookieJar ( http.cookiejar.CookieJar) 用于简单的内存存储,但FileCookieJar如果您需要长期存储持久性 cookie,则可以使用 CookieJar ( ),http.cookiejar.MozillaCookieJar如果您想使用以cookies.txt现在遗留的 Mozilla 格式存储的持久性 cookie,甚至可以使用 CookieJar ( )


如果您想使用网络浏览器中现有的 cookie,您必须首先将它们存储在 cookie.txt 兼容文件中,并将它们加载到 MozillaCookieJar 中。对于 Mozilla,您可以找到一个附加Cookie Exporter。对于其他浏览器,您必须通过读取浏览器中所需的cookie内容来手动创建cookie.txt文件。该格式可以在非官方 Cookie 常见问题解答中找到。摘录:

...每一行包含一个名称-值对。示例 cookies.txt 文件可能具有如下所示的条目:

.netscape.com 正确/错误 946684799 NETSCAPE_ID 100103

每行代表一条存储的信息。每个字段之间都会插入一个选项卡。

从左到右,每个字段代表的含义如下:

  • 域 - 创建并且可以读取变量的域。
  • flag - TRUE/FALSE 值,指示给定域内的所有计算机是否可以访问该变量。该值由浏览器自动设置,具体取决于您为域设置的值。
  • path - 变量有效的域内的路径。
  • secure - TRUE/FALSE 值,指示是否需要与域的安全连接来访问变量。*expiration - 变量到期的 UNIX 时间。UNIX 时间定义为自 1970 年 1 月 1 日 00:00:00 GMT 以来的秒数。
  • 名称 - 变量的名称。
  • 值 - 变量的值。

正常的方法是模拟完整的会话并自动从响应中提取 cookie。


Den*_*1al -2

您可以使用更好的库(恕我直言)- requests.

import requests

headers = {
    'User-Agent' : 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'
}

cookies = dict(c1="cookie_numba_one")

r = requests.get('http://example.com', headers = headers, cookies = cookies)
print(r.text)
Run Code Online (Sandbox Code Playgroud)