As you are probably aware, more often than not, an HTTP server will send more than just a session_id cookie; however, httplib2 handles cookies with a dictionary, like this:
response, content = http.request(url, 'GET', headers=headers)
headers = {'Cookie': response['set-cookie']}
url = 'http://www.example.com/home'
response, content = http.request(url, 'GET', headers=headers)
So, how do I set the extra cookies? If handled with a dictionary, I can't have double Cookie keys :S.
Thanks for your time.
Try this:
Cookies are contained in a single HTTP header, separated by semicolons. Example:
So you'll need to build a string from the cookies sent by the server, and then set that as the
Cookie
header.Edit: Actually, playing around a bit with httplib2 and re-reading your question, I'm not sure you actually need to do anything to get the functionality you want. The
set-cookie
value you get back from httplib2 is actually the rawSet-Cookie
header sent from the server; you can just put that into thecookie
header of the new response, and everything will work fine. Technically speaking you should remove some cookie attributes such asexpiry
, but I imagine most servers will handle that just fine.Doing some extra testing, with a dummy setcookie() PHP page, I generated in 3 test, the following set of headers:
The output actually supplied by httplib2 on the set-cookie key of the array, is, respectively for each header pair, this:
So it seems that httplib2 does deal with the problem properly, but now I'm presented with another problem. The "," in the expires attribute. As you can see, cookies get separated by a comma, but how to distinguish from that of the expires attribute.
I could split the string by commas, and then by ";", and end up with key value pairs for each cookie, nice and easy; but with the comma in expires, I can't possibly do that.
So, I'm thinking, I could use a regular expression that basically looks for "expires=letters, num&letters nums:nums:nums arbitrarychars[,|;|$]" and replaces it for something like expires=STUB, as I do not really care about the expiration time of the cookies.
So, would anyone be so kind as to give me the regex I can feed to re.sub()? I haven't really needed regex so far, thus I haven't learned them, and I really don't want to loose a few days for a single one :).
Yes, I just found out elsewhere about the Cookie header when making the request, but the server may send several Set-Cookie headers, with a cookie(and expiration,domain,etc attributes) per header. But with the dictionary system used in httplib2, I can't really get all the possible Set-Cookie headers sent by the server, but seemingly, just the last one.
So, any more ideas :)?