重写urllib2.HTTPError或者urllib.error.HTTPError并且读取响应HTML

我收到“HTTP错误500:内部服务器错误”响应,但我仍然想要读取错误HTML内的数据。

在Python 2.6中,我通常使用以下命令获取页面:

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

当试图在失败的URL上使用这个时,我得到了exceptionurllib2.HTTPError

 urllib2.HTTPError: HTTP Error 500: Internal Server Error 

我怎样才能获取这样的错误页面(有或没有urllib2 ),而他们都返回内部服务器错误?

请注意,在Python 3中,相应的exception是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() 

在你的情况下,你不需要build立请求。 做就是了

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

所以,你不要覆盖urllib2.HTTPError,你只是处理exception。

 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()