Python的urllib2.urlopen()在连接Java Restlet服务器时挂起

9 投票
2 回答
1945 浏览
提问于 2025-04-17 07:25

我正在尝试从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库

撰写回答