我正在使用Java 8发出POST请求,如下所示:
URL url = new URL("http://target.server.com/doIt");
URLConnection connection = url.openConnection();
HttpURLConnection httpConn = (HttpURLConnection) connection;
byte[] soapBytes = soapRequest.getBytes();
httpConn.setRequestProperty("Host", "target.host.com");
httpConn.setRequestProperty("Content-Length", soapBytes.length+"");
httpConn.setRequestProperty("Content-Type", "application/soap+xml; charset=utf-8");
httpConn.setRequestMethod("POST");
httpConn.setConnectTimeout(5000);
httpConn.setReadTimeout(35000);
httpConn.setDoOutput(true);
httpConn.setDoInput(true);
OutputStream out = httpConn.getOutputStream();
out.write(soapBytes);
out.close();
int statusCode;
try {
statusCode = httpConn.getResponseCode();
} catch (IOException e) {
InputStream stream = httpConn.getErrorStream();
if (stream == null) {
throw e;
} else {
// this never happens
}
}
我的soap请求包含文档ID,目标服务器(托管我不拥有或无权访问的第三方服务)返回与提供的ID匹配的PDF文档。
大多数情况下,服务器返回PDF文档,当文档不可用时,有时状态代码为500。但是,有时对getResponseCode()
的调用会抛出一个IOException,其中包含"无效的Http响应"。
我认为无论发生什么情况,服务器总会有一些响应代码返回。
答案 0 :(得分:2)
正如AxelH指出的那样,连接远程服务器时一定有问题,在这种情况下,你无法获得有效的响应。
如果您处于测试环境中,则可以监视连接在TCP级别(而不是在HTTP级别):在客户端和远程服务器之间放置一个监视器,监视所有交换的TCP流量在两个同行之间。如果您使用的是Eclipse,则可以创建 TCP监视器。