【问题标题】:how do I get pycurl to send cookies but not save them to file?如何让 pycurl 发送 cookie 但不将它们保存到文件中?
【发布时间】:2011-05-18 20:18:12
【问题描述】:

我需要 pycurl 来保存已发布表单中的 cookie,然后在同一域中的下一个 URL 中使用这些 cookie。它似乎不会自动执行此操作。

我已经阅读了 COOKIEFILE 和 COOKIEJAR 选项,但我不想将这些 cookie 保存到文件中。那么有没有其他方法可以使用 curl/pycurl 启用 cookie 而无需将它们保存到文件中?

【问题讨论】:

    标签: python cookies pycurl


    【解决方案1】:

    根据 PycURL 站点,真正的文档是 C API。 C API CURLOPT_COOKIE 和 CURLOPT_COOKIELIST 粗略地看了一下look like what you need

    【讨论】:

    • CURLOPT_COOKIELIST 文档显示了如何为请求设置 cookie,但是如果您正在登录并且网络服务器想要保存 cookie,则不清楚您将如何取回更新的列表饼干。
    • 如果您想从 Web 服务器读取 cookie 名称并且不想使用 CURLOPT_COOKIEFILE 或 CURLOPT_COOKIEJAR,您可能必须手动读取 Set-Cookie 响应标头。如果我是你,我会弄清楚如何使 cookiefile 或 cookiejar 变得实用。
    【解决方案2】:

    libcurl 文档指出:

    CURLOPT_COOKIEFILE

    给定一个空文件或不存在的文件或通过传递空字符串 (""),此选项将为此 curl 句柄启用 cookie,使其能够理解和解析收到的 cookie,然后在以后的请求中使用匹配的 cookie。

    我自己试过了,效果很好,只需使用相同的 curl 对象。

    示例

    import pycurl
    curl = pycurl.Curl()
    
    # Turn on cookies
    curl.setopt(pycurl.COOKIEFILE, "")
    
    # Login
    curl.setopt(pycurl.URL, "http://www.example.com/login.php")
    curl.setopt(pycurl.POST, 1)
    curl.setopt(pycurl.HTTPPOST, [('user', 'myuser'), ('pass', 'mypass'), ('submit', 'login')])
    curl.perform()
    
    # Now let's get us some members only page
    curl.setopt(pycurl.POST, 0) 
    curl.setopt(pycurl.URL, "http://www.example.com/members_only.php")
    curl.perform()
    

    我跳过了整个 StringIO 响应,以便我们继续关注主题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-16
      • 1970-01-01
      • 1970-01-01
      • 2016-11-24
      • 1970-01-01
      • 2014-07-06
      • 1970-01-01
      相关资源
      最近更新 更多