Substituindo urllib2.HTTPError ou urllib.error.HTTPError e ler HTML de resposta de qualquer maneira
-
19-09-2019 - |
Pergunta
Eu recebo um 'Erro HTTP 500: Erro de servidor interno'. Resposta, mas eu ainda quero ler os dados dentro do HTML de erro
Com Python 2.6, eu normalmente buscar uma página usando:
import urllib2
url = "http://google.com"
data = urllib2.urlopen(url)
data = data.read()
Ao tentar usar isso na URL não, fico com a urllib2.HTTPError
exceção:
urllib2.HTTPError: HTTP Error 500: Internal Server Error
Como posso obter tais páginas de erro (com ou sem urllib2
), todos enquanto eles estão retornando erros de servidor interno?
Note-se que com o Python 3, à excepção correspondente é urllib.error.HTTPError
.
Solução
O HTTPError
é um arquivo-como objeto . Você pode pegá-lo e, em seguida, read
seu conteúdo.
try:
resp = urllib2.urlopen(url)
contents = resp.read()
except urllib2.HTTPError, error:
contents = error.read()
Outras dicas
Se você quer dizer que você quer ler o corpo do 500:
request = urllib2.Request(url, data, headers)
try:
resp = urllib2.urlopen(request)
print resp.read()
except urllib2.HTTPError, error:
print "ERROR: ", error.read()
No seu caso, você não precisa para construir o pedido. Basta fazer
try:
resp = urllib2.urlopen(url)
print resp.read()
except urllib2.HTTPError, error:
print "ERROR: ", error.read()
Assim, você não substituir urllib2.HTTPError, você só tratar a exceção.
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()