urllib2 http status
rosendo
rosendo at dbora.com
Thu Jul 31 05:35:36 EDT 2003
Thanks again John.
The code goes fine.
Rosendo.
jjl at pobox.com (John J. Lee) wrote in message news:<87y8yh59zj.fsf at pobox.com>...
> rosendo at dbora.com (rosendo) writes:
>
> > I'm writing a http client to test some applications.
> > The code below it's the core of the client:
> [snip]
>
> You're using *both* urlopen *and* add_cookie_header / extract_cookies.
> Don't do that. urlopen calls those methods itself.
>
> Also, HTTPError is a subclass of URLError, so your second except:
> suite will never be reached. I'm not sure what the purpose of the
> empty except: there is, either -- why not just let the exception
> propogate to top level?
>
> The unreleased version of ClientCookie can do Referer automatically.
> Ask me if you want a copy (the release is waiting for somebody to look
> at an RFE for urllib2 that I've posted).
>
> Also, Python doesn't use semicolons <wink>, and the second 'argument'
> to except receives an exception, not a exception message (string).
>
>
> > Before this code we declare c = ClientCookie.Cookies(), etc......
> > Then i don't know how to know the status of the response, because the
> > property:
> > response.info().status seems not to function like i wait, that it's
> > with an 200, 301, 400, etc.....
> > How can obtein this status?
>
> If you get a returned response, it's always 200. For non-200
> responses, urllib2 always raises an exception. It's probably a wart,
> but too late to change now.
>
> Corrected code (untested, since incomplete):
>
> try:
> start_ts = time.time()
> request = urllib2.Request('http://%s%s' % (req.host, req.path),
> req.data, req.headers)
> request.add_header("Referer", 'http://%s%s' % (req.host, req.path))
> c.clear()
> #request = urllib2.Request('http://www.google.com')
> try:
> response = urllib2.urlopen(request)
> data = response.read()
> headers = response.info().headers
> #status = response.info().status
> except urllib2.HTTPError, e:
> print "URLError: ", e
> # Note: e.msg, e.code are what you want.
> # IIRC, HTTPError works just like a response object, too.
> duration = time.time() - start_ts
>
> print ('The result had status: 200 duration: %5.2f http://%s%s' %
> (response.info().status, duration, req.host,req.path))
> except:
> print sys.exc_type,sys.exc_value
> print 'cagadita....' + str(req)
>
>
> John
More information about the Python-list
mailing list