El más simple era es simplemente detectar la excepción IOError de urllib:
try:
urllib.urlopen(
"http://example.com",
proxies={'http':'http://example.com:8080'}
)
except IOError:
print "Connection error! (Check proxy)"
else:
print "All was fine"
Asimismo, desde this blog post - "check status proxy address" (con algunas mejoras leves):
import urllib2
import socket
def is_bad_proxy(pip):
try:
proxy_handler = urllib2.ProxyHandler({'http': pip})
opener = urllib2.build_opener(proxy_handler)
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
urllib2.install_opener(opener)
req=urllib2.Request('http://www.example.com') # change the URL to test here
sock=urllib2.urlopen(req)
except urllib2.HTTPError, e:
print 'Error code: ', e.code
return e.code
except Exception, detail:
print "ERROR:", detail
return True
return False
def main():
socket.setdefaulttimeout(120)
# two sample proxy IPs
proxyList = ['125.76.226.9:80', '213.55.87.162:6588']
for currentProxy in proxyList:
if is_bad_proxy(currentProxy):
print "Bad Proxy %s" % (currentProxy)
else:
print "%s is working" % (currentProxy)
if __name__ == '__main__':
main()
Recuerde que esto podría duplicar el tiempo de la secuencia de comandos toma, si el proxy está inactivo (ya que tendrá que esperar dos tiempos de espera de conexión). A menos que tenga que saber específicamente que el proxy tiene la culpa, manejar el IOError es mucho más limpio, simple y rápido.
¿No puedes detectar la excepción? – marcog
Creo que atrapar la excepción no es la mejor manera de hacerlo, verifique el comentario que dejé en la respuesta dbr. ¿Podrías darme tu opinión? porque estoy planeando escribir un comprobador de proxy yo mismo (estoy empezando con Python y este será mi segundo script de python). – jahmax