urllib2.HTTPErrorまたはurllib.error.HTTPErrorをオーバーライドして、とにかくレスポンスHTMLを読み込みます

StackOverflow https://stackoverflow.com/questions/2233687

質問

私は、「HTTPエラー500:内部サーバーエラー」受信応答を、私はまだエラー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であることに注意してください。

他のヒント

あなたが意味する場合は、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()
scroll top