Java getInputStream 400错误

时间:2010-06-14 14:50:46

标签: java

当我使用Java HttpUrlConnection联系Web服务时,它只返回400 Bad Request(IOException)。如何获取服务器返回的XML信息;它似乎不在连接的getErrorStream中,也不在任何异常信息中。

当我针对Web服务运行以下PHP代码时:

<?php

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://www.myclientaddress.com/here/" );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_POST,1 );
curl_setopt($ch, CURLOPT_POSTFIELDS,"username=ted&password=scheckler&type=consumer&id=123456789&zip=12345");

$result=curl_exec ($ch);
echo $result;
?>

它返回以下内容:

<?xml version="1.0" encoding="utf-8"?>
<response>
    <status>failure</status>
    <errors>
        <error name="RES_ZIP">Zip code is not valid.</error>
        <error name="ZIP">Invalid zip code for residence address.</error>
    </errors>
</response>

所以我知道信息存在

4 个答案:

答案 0 :(得分:2)

如果您尝试从连接中读取getInputStream(),则HttpUrlConnection将返回FileNotFoundException,因此每当状态代码等于或大于400时,您应该使用getErrorStream()。

除此之外,请注意,因为成功状态代码不仅仅是200,即使是201,204等也经常被用作成功状态。

以下是我如何管理它的示例

// ... connection code code code ...

// Get the response code 
int statusCode = connection.getResponseCode();

InputStream is = null;

if (statusCode >= 200 && statusCode < 400) {
   // Create an InputStream in order to extract the response object
   is = connection.getInputStream();
}
else {
   is = connection.getErrorStream();
}

// ... callback/response to your handler....

通过这种方式,您将能够在成功和错误情况下获得所需的响应。

希望这有帮助!

答案 1 :(得分:1)

在这里找到答案:Read error response body in Java

是的我!

答案 2 :(得分:0)

如果服务器返回XML并且您将参数作为url传递,为什么不使用支持JAX-RS(Java的REST Web服务API)的库,例如Apache CXF

我知道它支持JAX-RS,因为手册中有chapter

答案 3 :(得分:0)

我有同样的问题,并在下面添加两行解决了它。

httpConn.setRequestProperty(“连接”,“关闭”); System.setProperty(“http.keepAlive”,“false”);