Nice programing

urllib2.HTTPError 또는 urllib.error.HTTPError 재정의하고 어쨌든 응답 HTML 읽기

nicepro 2020. 10. 26. 21:03
반응형

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에서 이것을 사용하려고 할 때 예외가 발생합니다 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()

참고 URL : https://stackoverflow.com/questions/2233687/overriding-urllib2-httperror-or-urllib-error-httperror-and-reading-response-html

반응형