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