urllib2.HTTPErrorまたはurllib.error.HTTPErrorをオーバーライドして、とにかくレスポンスHTMLを読み込みます
-
19-09-2019 - |
質問
私は、「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
であることに注意してください。
解決
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()
所属していません StackOverflow