【问题标题】:Python CookieJar saves cookie, but doesn't send it to websitePython CookieJar 保存 cookie,但不将其发送到网站
【发布时间】:2011-11-24 01:19:46
【问题描述】:

我正在尝试使用 urllib2 和 cookiejar 登录网站。它保存了会话 ID,但是当我尝试打开另一个需要身份验证的链接时,它说我没有登录。我做错了什么?

这是代码,对我来说失败了:

import urllib
import urllib2
import cookielib

cookieJar = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar))

# Gives response saying that I logged in succesfully
response = opener.open("http://site.com/login", "username=testuser&password=" + md5encode("testpassword"))

# Gives response saying that I am not logged in
response1 = opener.open("http://site.com/check")

【问题讨论】:

    标签: python urllib2 cookiejar


    【解决方案1】:

    您的实现似乎很好......并且应该可以工作。

    它应该发送正确的cookies,但我认为这是网站实际上没有让你登录的情况。

    你怎么能说它没有发送cookies或者你收到的cookies不是验证你的那个。

    使用:response.info() 查看响应的标题,以了解您实际收到的 cookie。

    该网站可能没有让您登录,因为:

    • 它检查了您未设置的 User-agent,因为某些站点从 4 个主要浏览器打开只是为了禁止机器人访问。

    • 该网站可能正在寻找一些您可能不会发送的特殊隐藏表单字段。

    1 条建议:

    from urllib import urlencode
    # Use urlencode to encode your data
    
    data = urlencode(dict(username='testuser', password=md5encode("testpassword")))
    response = opener.open("http://site.com/login", data)
    

    这里还有一件事很奇怪:

    • 在发送密码之前,您正在对密码进行 md5 编码。 (奇怪)
    • 这通常由服务器在与数据库进行比较之前完成。
    • 只有在 site.com 在 javascript 中实现 md5 时才有可能。
    • 这是一种非常罕见的情况,因为可能只有 0.01 % 的网站会这样做..
    • 检查 - 这可能是问题所在,您提供的是散列形式,而不是服务器的实际密码。
    • 因此,服务器会再次为您的 md5 哈希计算 md5。

    看看.. !! :)

    【讨论】:

    • 感谢您的回答。我正在为某些服务开发客户端软件,并且我正在与实现 php 服务器的人直接通信。出于安全原因,密码需要作为 md5 散列发送。并且没有任何隐藏的表单字段。我会尝试使用 mechanize 或 Curl。
    • 考虑通过放弃答案来授予答案,并通过单击答案旁边的“勾号”来接受答案。这就是你对 stackoverflow 的感谢。
    • @TomRay 在发送密码之前以这种方式散列密码实际上并不能保护任何东西——它只是提供一个 派生 密码,它与来自安全角度。实施该服务的人并没有考虑清楚。
    【解决方案2】:

    我自己的测试服务器也有类似的问题,它在浏览器上运行良好,但在 urllib2.build_opener 解决方案上却不行。

    问题似乎出在 urllib2 中。正如these answers 建议的那样,使用更强大的mechanize 库而不是urllib2 很容易:

    cookieJar = cookielib.CookieJar()
    browser = mechanize.Browser()
    browser.set_cookiejar(cookieJar)
    opener = mechanize.build_opener(*browser.handlers)
    

    开瓶器将按预期工作!

    【讨论】:

      猜你喜欢
      • 2016-11-24
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      • 2015-10-27
      • 2019-01-13
      • 2011-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多