重写urllib2.HTTPError或urllib.error.HTTPError并读取响应HTML
我收到了一个“HTTP错误500:内部服务器错误”的响应,但我还是想查看错误页面里的数据。
在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
。
3 个回答
-1
当然可以!请看下面的内容:
这个问题主要是关于如何在代码中处理某些特定的情况。比如,当你在编写程序时,可能会遇到一些错误或者意外的情况,这时候你需要想办法让程序能够继续运行,而不是直接崩溃。
通常,我们会使用一些控制结构,比如“如果...那么...”的语句,来判断程序当前的状态,然后决定接下来该怎么做。这样可以让程序更加灵活,也能提高用户的体验。
另外,处理这些情况时,记录一些日志信息也是很重要的。这样可以帮助你在出现问题时,快速找到原因并解决它。
总之,编写健壮的代码就是要考虑到各种可能出现的情况,并做好相应的处理,这样才能让程序更加稳定。
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()
9
如果你是想读取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,只需处理这个异常就可以了。
136
HTTPError
是一种类似文件的对象。你可以捕捉到它,然后 read
它的内容。
try:
resp = urllib2.urlopen(url)
contents = resp.read()
except urllib2.HTTPError, error:
contents = error.read()