Estoy tratando de conectarme a un servidor de Restlet en ejecución local desde python, pero la conexión se cuelga infinitamente (o se agota el tiempo si configuro un tiempo de espera).Urllib2.urlopen() de Python colgando con conexión local a un servidor de Restlet de Java
import urllib2
handle = urllib2.urlopen("http://localhost:8182/contact/123") # hangs
Si uso curl
de una concha para abrir la URL anterior, los resultados con rapidez. Si utilizo urllib2 para abrir un servicio local diferente (por ejemplo, un servidor web Django en el puerto 8000), urllib2 funciona bien.
He intentado deshabilitar el firewall (estoy haciendo esto en OS X). Intenté cambiar localhost a 127.0.0.1. Los registros de Restlet para las conexiones curl y urllib2 aparecen a un lado del user-agent.
Mi solución sería simplemente llamar al curl
a través de subprocess
, pero prefiero entender por qué esto está fallando.
Así es como se ve mi Recursos Restlet:
public class ContactResource extends ServerResource {
@Get
public String represent() throws Exception {
return "<contact details>";
}
//....
}
Avísame si desea más información/código
¿Qué ocurre si prueba diferentes valores de tiempo de espera? 'urllib2.urlopen (" ... ", timeout = 1)'? – Seth
Con timeout = 1 o 2, obtengo "urllib2.URLError:" y handle.read() devuelve cadena vacía –
¿Está diseñada su aplicación Restlet para cambiar el comportamiento basado en User-Agent o Accept headers? Además, su comentario de que ve a urllib2 en el registro implica que el servidor lo ve conectarse y responde a él - urllib2 simplemente no cree que la respuesta llegue. –