当我使用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>
所以我知道信息存在
答案 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”);