Переопределение urllib2.HTTPError или urllib.ошибка.HTTPError и чтение ответа HTML в любом случае



я получаю ответ "HTTP Error 500: Internal Server Error", но я все еще хочу прочитать данные внутри ошибки HTML.



С Python 2.6 я обычно получаю страницу, используя:



import urllib2
url = "http://google.com"
data = urllib2.urlopen(url)
data = data.read()


при попытке использовать это на неудачном URL, я получаю исключение urllib2.HTTPError:



urllib2.HTTPError: HTTP Error 500: Internal Server Error


как я могу получить такие страницы ошибок (с или без urllib2), все время, пока они возвращают внутренние ошибки сервера?



обратите внимание, что с Python 3, соответствующее исключение -urllib.error.HTTPError.

395   3  

3 ответов:

The HTTPError - это файл-как объект. Вы можете поймать его, а затем read его содержимое.

try:
    resp = urllib2.urlopen(url)
    contents = resp.read()
except urllib2.HTTPError, error:
    contents = error.read()

Если вы хотите прочитать тело 500:

request = urllib2.Request(url, data, headers)
try:
        resp = urllib2.urlopen(request)
        print resp.read()
except urllib2.HTTPError, error:
        print "ERROR: ", error.read()

в вашем случае, вам не нужно создать запрос. Просто сделай

try:
        resp = urllib2.urlopen(url)
        print resp.read()
except urllib2.HTTPError, error:
        print "ERROR: ", error.read()

Итак, вы не переопределяете urllib2.HTTPError, вы просто обрабатываете исключение.

alist=['http://someurl.com']

def testUrl():
    errList=[]
    for URL in alist:
        try:
            urllib2.urlopen(URL)
        except urllib2.URLError, err:
            (err.reason != 200)
            errList.append(URL+" "+str(err.reason))
            return URL+" "+str(err.reason)
    return "".join(errList)

testUrl()

Comments

    Ничего не найдено.