【发布时间】:2011-05-18 20:18:12
【问题描述】:
我需要 pycurl 来保存已发布表单中的 cookie,然后在同一域中的下一个 URL 中使用这些 cookie。它似乎不会自动执行此操作。
我已经阅读了 COOKIEFILE 和 COOKIEJAR 选项,但我不想将这些 cookie 保存到文件中。那么有没有其他方法可以使用 curl/pycurl 启用 cookie 而无需将它们保存到文件中?
【问题讨论】:
我需要 pycurl 来保存已发布表单中的 cookie,然后在同一域中的下一个 URL 中使用这些 cookie。它似乎不会自动执行此操作。
我已经阅读了 COOKIEFILE 和 COOKIEJAR 选项,但我不想将这些 cookie 保存到文件中。那么有没有其他方法可以使用 curl/pycurl 启用 cookie 而无需将它们保存到文件中?
【问题讨论】:
根据 PycURL 站点,真正的文档是 C API。 C API CURLOPT_COOKIE 和 CURLOPT_COOKIELIST 粗略地看了一下look like what you need。
【讨论】:
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 响应,以便我们继续关注主题。
【讨论】: