Java HttpURLConnection请求使用无效的Http响应抛出IOException

时间:2017-02-03 11:48:06

标签: java http httpurlconnection

我正在使用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响应"。

我认为无论发生什么情况,服务器总会有一些响应代码返回。

  • 这是否意味着服务器正在返回完全没有垃圾的垃圾 匹配HTTP响应的预期格式?
  • 有没有办法获得有关实际响应的更多信息?
  • 有没有办法检索原始文本回复(如果有的话)?

1 个答案:

答案 0 :(得分:2)

正如AxelH指出的那样,连接远程服务器时一定有问题,在这种情况下,你无法获得有效的响应。

如果您处于测试环境中,则可以监视连接在TCP级别(而不是在HTTP级别):在客户端和远程服务器之间放置一个监视器,监视所有交换的TCP流量在两个同行之间。如果您使用的是Eclipse,则可以创建 TCP监视器