如何使用 urllib 发送 cookie

not*_*hno 3 python cookies http urllib python-3.x

我正在尝试连接到一个需要您使用特定 cookie 才能访问它的网站。为了这个问题,我们将 cookie 称为“required_cookie”,将值称为“required_value”。

这是我的代码:

import urllib
import http.cookiejar

cj = http.cookiejar.CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))

opener.addheaders = [('required_cookie', 'required_value'), ('User-Agent', 'Mozilla/5.0')]

urllib.request.install_opener(opener)

req = Request('https://www.thewebsite.com/')
webpage = urlopen(req).read()
print(webpage)
Run Code Online (Sandbox Code Playgroud)

我是 urllib 的新手,所以请作为初学者回答我

Sah*_*hin 9

借助 Kite 文档: https://www.kite.com/python/answers/how-to-add-a-cookie-to-an-http-request-using-urllib-in-python
您可以添加 cookie这边走:

import urllib
a_request = urllib.request.Request("http://www.kite.com/")
a_request.add_header("Cookie", "cookiename=cookievalue")
page = urllib.request.urlopen(a_request).read()
Run Code Online (Sandbox Code Playgroud)

或者以不同的方式:

from urllib.request import Request
url = "https://www.kite.com/"
req = Request(url, headers={'User-Agent': 'Mozilla/5.0', 'Cookie':'myCookie=lovely'})
page = urllib.request.urlopen(req).read()
Run Code Online (Sandbox Code Playgroud)


aba*_*ert 5

为此urllib,您需要:

  • 构造一个Cookie对象。构造函数没有记录在文档中,但如果你help(http.cookiejar.Cookie)在交互式解释器中,你可以看到它的构造函数需要所有 16 个属性的值。请注意,文档说,“http.cookiejar 的用户不会构建他们自己的 Cookie 实例。”
  • 将其添加到 cookiejar 中cj.set_cookie(cookie)
  • 告诉 cookiejar 将正确的标头添加到请求中cj.add_cookie_headers(req)

假设您已经正确配置了策略,您就设置好了。

但这是一个巨大的痛苦。正如文档urllib.request所说:

另请参见请求包被推荐用于更高级别的HTTP客户端接口。

而且,除非您有充分的理由无法安装 ,否则您requests真的应该这样做。urllib对于非常简单的情况是可以接受的,当您需要深入了解情况时它会很方便 - 但对于其他所有事情,requests它要好得多。

使用requests,您的整个程序将变成单行程序:

webpage = requests.get('https://www.thewebsite.com/', cookies={'required_cookie': required_value}, headers={'User-Agent': 'Mozilla/5.0'}).text
Run Code Online (Sandbox Code Playgroud)

......虽然它可能更易读几行:

cookies = {'required_cookie': required_value}
headers = {'User-Agent': 'Mozilla/5.0'}
response = requests.get('https://www.thewebsite.com/', cookies=cookies, headers=headers)
webpage = response.text
Run Code Online (Sandbox Code Playgroud)