Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HttpURLConnection请求引发IOException,Http响应无效_Java_Http_Httpurlconnection - Fatal编程技术网

Java HttpURLConnection请求引发IOException,Http响应无效

Java HttpURLConnection请求引发IOException,Http响应无效,java,http,httpurlconnection,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.setRequestP

我使用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()
的调用会抛出一个带有“无效Http响应”的IOException

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

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

正如AxelH所指出的,在连接远程服务器时一定出现了问题,在这种情况下,您无法得到有效的响应


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

,如果连接到服务器时发生错误。所以我想这其中有一些问题。PS:-1将在代码无法识别时返回,但如果这是真的,那么在编写soap请求时不会抛出异常,这发生在调用获取响应代码之前?这似乎是javadoc中的一个错误。如果打开源代码,您将看到在打开输入流时可能会发生这种情况(如果可以轻松地重现这种情况,可以使用调试器进行检查)。然后你就会明白为什么(或者至少是原因)不幸的是,这对我来说很难重现。我会看看服务所有者是否能解释一下情况。虽然我认为IOException的错误消息应该是“连接被拒绝”。@RTF实际上,当您尝试连接到一个不可用的服务器时,您应该得到一个“连接被拒绝”异常。但是,一旦建立连接,远程对等方异常中止连接,就会抛出另一条错误消息。您知道在我的代码片段中,到远程服务器的连接是在什么时候建立的吗?@RTF Sure:当您调用
httpConn.getOutputStream()
时,连接是隐式建立的。请阅读中有关此多步骤过程的信息。