代码之家  ›  专栏  ›  技术社区  ›  notjoshno Deathsidious

如何用urllib发送cookies

  •  0
  • notjoshno Deathsidious  · 技术社区  · 7 年前

    我正在尝试连接到一个网站,该网站要求您具有特定的cookie才能访问它。为了解决这个问题,我们将cookie称为“required\u cookie”,值称为“required\u 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)
    

    我对urllib不熟悉,所以请以初学者的身份回答我

    1 回复  |  直到 7 年前
        1
  •  2
  •   Michael come lately PhiLho    6 年前

    用它来做这个 urllib ,您需要:

    • 构造一个 Cookie 反对。文档中没有构造函数的文档,但是如果 help(http.cookiejar.Cookie) 在交互式解释器中,可以看到它的构造函数要求所有16个属性的值。请注意 the docs 比如,“http.cookiejar的用户不应该构建自己的Cookie实例。”
    • 将它添加到cookiejar中 cj.set_cookie(cookie) .
    • 告诉cookiejar在请求中添加正确的头 cj.add_cookie_headers(req) .

    假设您正确配置了策略,就可以设置了。

    但这是一个巨大的痛苦。作为 urllib.request 说:

    另见 这个 Requests package 建议用于更高级别的HTTP客户端接口。

    而且,除非你有好的理由不能安装 requests ,你真的应该走那条路。 urllib语言库 对于非常简单的情况来说是可以接受的,而且当你需要深入了解情况时,它可以很方便,但是对于其他一切, 请求 好多了。

    请求 ,整个程序变成一行:

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

    尽管这几行可能更容易阅读:

    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