Python urllib2: Reading content body even during HTTPError exception?

Viewed 29373

I'm using urllib2 to fetch a a page via HTTP. Sometimes the resource throws a HTTP error 400 (Bad Request) when my request contains an error. However, that response also contains an XML element that gives a detailed error message. It would be very handy to be able to see that error rather than just the HTTPError exception returned by urllib2.

How do I return the document contents in spite of the exception?

3 Answers

You can read the response message from the HTTPError exception.

Python3 example

import urllib.request

try:
    request = urllib.request.Request('http://httpstat.us/418', headers={'Accept': 'text/plain', 'User-Agent': ''})
    with urllib.request.urlopen(request) as page:
        print('success: ' + page.read().decode())
except urllib.error.HTTPError as httpError:
        error = httpError.read().decode()
        print('error: ' + error)
Related