如何在 python 3 中使用 cookie?

新手上路,请多包涵

我想使用从我的 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")

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

原文由 Yong Deng 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 787
1 个回答

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

 cookieProcessor = urllib.request.HTTPCookieProcessor()
opener = urllib.request.build_opener(cookieProcessor)

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

 response = opener.open(request,timeout=100)

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


如果您想使用网络浏览器中存在的 cookie,您必须首先将它们存储在 cookie.txt 兼容文件中,然后将它们加载到 MozillaCookieJar 中。对于 Mozilla,您可以找到一个附加组件 Cookie Exporter 。对于其他浏览器,您必须通过在浏览器中读取您需要的cookies的内容,手动创建一个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 以来的秒数。
  • 名称 - 变量的名称。
  • 值 - 变量的值。

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

原文由 Serge Ballesta 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题