2011-11-30 16 views
8

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

+0

¿Qué ocurre si prueba diferentes valores de tiempo de espera? 'urllib2.urlopen (" ... ", timeout = 1)'? – Seth

+0

Con timeout = 1 o 2, obtengo "urllib2.URLError: " y handle.read() devuelve cadena vacía –

+0

¿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. –

Respuesta

0

hay ProxyHandler (http://docs.python.org/library/urllib2.html#urllib2.ProxyHandler) en urllib2

tratan de pasar diccionario vacío a antes de urlopen

urllib2.ProxyHandler([]) 
handle = urllib2.urlopen("http://localhost:8182/contact/123") 
+0

Lo intentaré pronto, gracias –

+0

@dolan ¿lo intentó ya? – lig

+0

El código anterior genera un error desde la primera línea: "AssertionError: los proxies deben ser un mapeo" (python 2.7) –

Cuestiones relacionadas