Tengo un sitio web simple que estoy probando. Se ejecuta en localhost y puedo acceder a él en mi navegador web. La página de índice es simplemente la palabra "en ejecución". urllib.urlopen
leerá con éxito la página pero urllib2.urlopen
no lo hará. Aquí hay un script que muestra el problema (esto es el guión real y no una simplificación de un script de prueba es diferente):urllib.urlopen funciona, pero urllib2.urlopen no
import urllib, urllib2
print urllib.urlopen("http://127.0.0.1").read() # prints "running"
print urllib2.urlopen("http://127.0.0.1").read() # throws an exception
Aquí está el seguimiento de la pila:
Traceback (most recent call last):
File "urltest.py", line 5, in <module>
print urllib2.urlopen("http://127.0.0.1").read()
File "C:\Python25\lib\urllib2.py", line 121, in urlopen
return _opener.open(url, data)
File "C:\Python25\lib\urllib2.py", line 380, in open
response = meth(req, response)
File "C:\Python25\lib\urllib2.py", line 491, in http_response
'http', request, response, code, msg, hdrs)
File "C:\Python25\lib\urllib2.py", line 412, in error
result = self._call_chain(*args)
File "C:\Python25\lib\urllib2.py", line 353, in _call_chain
result = func(*args)
File "C:\Python25\lib\urllib2.py", line 575, in http_error_302
return self.parent.open(new)
File "C:\Python25\lib\urllib2.py", line 380, in open
response = meth(req, response)
File "C:\Python25\lib\urllib2.py", line 491, in http_response
'http', request, response, code, msg, hdrs)
File "C:\Python25\lib\urllib2.py", line 418, in error
return self._call_chain(*args)
File "C:\Python25\lib\urllib2.py", line 353, in _call_chain
result = func(*args)
File "C:\Python25\lib\urllib2.py", line 499, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 504: Gateway Timeout
¿Alguna idea? Podría terminar necesitando algunas de las funciones más avanzadas de urllib2
, así que no quiero simplemente recurrir al uso de urllib
, además quiero entender este problema.
Esto solucionó el problema, aunque no tengo idea de cómo o por qué pensó usar un proxy, ya que mi script solo tenía tres líneas y no tengo variables de entorno que indiquen nada sobre ningún proxy. Aún así, es bueno tener esto resuelto, así que gracias por la ayuda. –
La instancia de OpenerDirector no tiene el atributo 'urlopen' - necesita cambiar el fragmento anterior para que sea abridor.open (... – ryan