try-catch-finally
try-catch-finally

Reputation: 7634

PyCurl 7.19.0: get cookies from response using getinfo(pycurl.COOKIELIST)

I'd like to get the Cookies that have been carried with the response (Set-Cookie: name=value; ...).

When passing the info constant and the reference of an empty list:

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

I get the following error:

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

That was straightforward.

I also tried this signature:

set_cookies = c.getinfo(c.COOKIELIST)

I get this error:

ValueError: invalid argument to getinfo

This is a bit vague, however.

Getting the HTTP status code using getinfo() works fine.

I get a 200 OK and Set-Cookie headers, of course (debugging with c.setopt(pycurl.VERBOSE, 1)).

Of course I've read

With very few exceptions, PycURL constants are derived from libcurl constants by removing the CURLINFO_ prefix.

Maybe this is the exception?

In my opinion the documentation is a quite poor and does not contain any info about getting cookies sent with Set-Cookie.

References:

Upvotes: 2

Views: 2465

Answers (1)

try-catch-finally
try-catch-finally

Reputation: 7634

There's no method to get response cookies after calling perform(). Headers sent by the server can be captured using a callback function passed to the PyCurl instance while configuring with setopt():

CURLOPT_HEADERFUNCTION

   Callback for writing received headers. See CURLOPT_HEADERFUNCTION 

Example code excerpt:

    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)

References:

Upvotes: 3

Related Questions