Handling cookies without urllib2 and cookielib
Gabriel Genellina
gagsl-py2 at yahoo.com.ar
Sat Dec 15 19:12:06 EST 2007
On 14 dic, 23:44, Joshua Kugler <jkug... at bigfoot.com> wrote:
> I'm using HTTPlib to construct some functional tests for a web app we're
> writing. We're not using urllib2 because we need support for PUT and
> DELETE methods, which urllib2 does not do.
>
> We also need client-side cookie handling. So, I start reading about
> cookielib and run across a problem. It's cookie handling is tied quite
> tightly to urllib2's request object. httplib has somewhat different
> semantics in its request object. So, you can use cookielib with httplib.
> And cookie lib has no simple function (that I could find) for passing in a
> set-cookie header and getting back a CookieJar object (or even a list of
> Cookie objects).
What about correcting the first thing, making urllib2 support HEAD/PUT/
DELETE?
import urllib2
class Request(urllib2.Request):
def __init__(self, url, data=None, headers={},
origin_req_host=None, unverifiable=False,
method=None):
urllib2.Request.__init__(self, url, data, headers,
origin_req_host, unverifiable)
self.method = method
def get_method(self):
if self.method is None:
if self.data is not None:
return "POST"
else:
return "GET"
return self.method
py> f = urllib2.urlopen(Request("http://www.python.org/",
method="HEAD"))
py> print f.info()
Date: Sun, 16 Dec 2007 00:03:43 GMT
Server: Apache/2.2.3 (Debian) DAV/2 SVN/1.4.2 mod_ssl/2.2.3 OpenSSL/
0.9.8c
Last-Modified: Sat, 15 Dec 2007 16:25:58 GMT
ETag: "60193-3e6a-a24fb180"
Accept-Ranges: bytes
Content-Length: 15978
Connection: close
Content-Type: text/html
py> print len(f.read())
0
Notes:
a) Instead of urlopen(url,...) you must use urlopen(Request(url,...))
b) Redirection is not handled correctly in HTTPRedirectHandler (the
request method should be copied over)
c) I've not verified PUT / DELETE methods
d) I'll try to make a proper patch later
--
Gabriel Genellina
More information about the Python-list
mailing list