PyCurl 7.19.0:使用getinfo从响应中获取cookie(pycurl.COOKIELIST)

时间:2014-12-25 21:36:32

标签: python cookies libcurl pycurl

我想获得响应中携带的Cookie(Set-Cookie: name=value; ...)。

传递info常量和空列表的引用时:

set_cookies = []
c.getinfo(c.COOKIELIST, set_cookies)

我收到以下错误:

TypeError: c.getinfo() takes exactly 1 argument (2 given)

这很简单。

我也试过这个签名:

set_cookies = c.getinfo(c.COOKIELIST)

我收到此错误:

ValueError: invalid argument to getinfo

然而,这有点模糊。

使用getinfo()获取HTTP状态代码可以正常工作。

我当然得到200 OKSet-Cookie标题(使用c.setopt(pycurl.VERBOSE, 1)进行调试)。

我当然读过

  

除极少数例外情况外,PycURL常量是通过删除CURLINFO_前缀从libcurl常量派生的。

也许这是例外?

在我看来,文档很差,并且不包含任何有关使用Set-Cookie发送Cookie的信息。

参考文献:

1 个答案:

答案 0 :(得分:3)

调用perform()后,无法获得响应Cookie。在使用setopt()进行配置时,可以使用传递给PyCurl实例的回调函数捕获服务器发送的标头:

  

CURLOPT_HEADERFUNCTION

   Callback for writing received headers. See CURLOPT_HEADERFUNCTION 

示例代码摘录:

    set_cookies = []

    # closure to capture Set-Cookie
    def _write_header(header):
        match = re.match("^Set-Cookie: (.*)$", header)

        if match:
            set_cookies.append(match.group(1))

    # use closure to collect cookies sent from the server
    c.setopt(pycurl.HEADERFUNCTION, _write_header)

参考文献: