Python的urllib2.urlopen()在连接Java Restlet服务器时挂起
我正在尝试从Python连接到本地运行的Restlet服务器,但连接一直挂着不动(如果我设置了超时,就会超时)。
import urllib2
handle = urllib2.urlopen("http://localhost:8182/contact/123") # hangs
如果我在命令行中使用curl
打开上面的URL,结果很快就返回了。如果我用urllib2打开另一个本地服务(比如在8000端口的Django网页服务器),urllib2也能正常工作。
我尝试过关闭防火墙(我是在OS X上操作)。我还尝试把localhost换成127.0.0.1。Restlet的日志显示curl和urllib2的连接情况基本相同,除了用户代理的不同。
我的解决办法是通过subprocess
调用curl
,但我更想知道为什么会出现这个问题。
这是我的Restlet资源的样子:
public class ContactResource extends ServerResource {
@Get
public String represent() throws Exception {
return "<contact details>";
}
//....
}
如果你需要更多信息或代码,请告诉我。
2 个回答
0
在urllib2里有一个叫做ProxyHandler的东西(你可以在这里查看详细信息:http://docs.python.org/library/urllib2.html#urllib2.ProxyHandler)。
在使用urlopen之前,可以试着给它传一个空的字典。
urllib2.ProxyHandler([])
handle = urllib2.urlopen("http://localhost:8182/contact/123")
3
我遇到了类似的问题,最后选择使用了Requests库。