目标:从虚拟机请求 Web 服务
麻烦:别急httpClient.execute(request)
环境:
- 主机: Window Server 2008 R2 x64
- 虚拟盒子 4.2.16
- IIS 6.1
- 2x VM: Kubuntu 12.04.2 amd64
网络设置:NAT + 端口转发- Apache Tomcat 7.0.26
- JVM 1.6
因此,Web 服务来自M-Files,一个文档管理系统,并在 IIS 上运行。显然,我的 Web 应用程序在 tomcat 上运行。有两个虚拟机
我如何初始化HttpClient
:
httpClient = new DefaultHttpClient();
httpClient.getParams().setParameter("http.socket.timeout", new Integer(1000));
我设置了超时参数以确保应用程序在冻结时不会execute
冻结。
我如何创建请求:
private HttpGet createHttpGet(String url, boolean isAuthenticate) throws IOException {
HttpGet get = new HttpGet(url);
if (isAuthenticate)
get.addHeader("X-Authentication", getAuthenticationToken());
return get;
}
我如何执行请求:
private String executeAndReturn(HttpRequestBase request) throws IOException {
logger.info("[MFiles: request] " + request.getURI());
HttpResponse response = httpClient.execute(request);
logger.info("[MFiles] request sent, waiting response");
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String tmp;
StringBuilder builder = new StringBuilder();
while ((tmp = reader.readLine()) != null) {
logger.info("[MFiles] reading response");
builder.append(tmp);
}
tmp = builder.toString();
reader.close();
logger.info("[MFiles: response] " + tmp);
return tmp;
}
我可以使用ping 10.0.2.2
or从虚拟机访问主机ping 192.168.56.102
并请求 web 服务 on http://10.0.2.2/REST
orhttp://192.168.56.102/REST
但某些请求冻结,我不明白为什么。此外,如果我在主机上部署我的网络应用程序,一切都很好!
我怀疑我的 VM 网络配置存在错误,但在这种情况下,它应该永远不会成功运行,不是吗?
任何帮助表示赞赏:)