我正在以XML格式从restful Web服务检索数据,但不幸的是我的String
是null
。请帮帮我,我的代码中的问题在哪里?
以下是示例代码:
URL url = new URL("http://loxvo.fogbugz.com/api.asp?cmd=logon&email=myemail&password=mypwd");
HttpURLConnection request1 = (HttpURLConnection) url.openConnection();
request1.setRequestMethod("GET");
request1.connect();
InputStream is = request1.getInputStream();
BufferedReader bf_reader = new BufferedReader(new InputStreamReader(is));
String responseData = IOUtils.toString(bf_reader);
System.out.print(responseData);
我在休息客户端尝试了这个网址:它返回了正确的xml,但我的String
是null
。
答案 0 :(得分:3)
您可以阅读
之类的回复 BufferedReader bufferedReader =
new BufferedReader(new InputStreamReader(request1.getInputStream()));
String line;
while ((line = bufferedReader.readLine()) != null) {
System.out.print(line);
}
获取代码。试试
URL url = new URL("https://loxvo.fogbugz.com/api.asp?cmd=logon&email=myemail&password=mypwd");
答案 1 :(得分:2)
尝试将请求的InputStream直接传递给IOUtils.toString(), 因为IOUtils.toString自己进行缓冲。
此外,如果请求,您可以使用request1.getResponseCode()进行检查 是成功的还是有任何类型的Http错误。
此外,没有必要调用connect()方法,因为这是 在getInputStream()调用中隐含地完成。
更新:获取错误302.当然,我有正确的登录数据。但请求必须使用以下代码:
try {
URL url = new URL("http://loxvo.fogbugz.com/api.asp?cmd=logon&email=myemail& password=mypwd");
//URL url = new URL("http://www.google.de");
HttpURLConnection request1 = (HttpURLConnection) url.openConnection();
request1.setRequestMethod("GET");
// request1.connect();
String code = String.valueOf(request1.getResponseCode());
System.out.println("Error code "+code);
InputStream is = request1.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is));
String line;
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
// BufferedReader bf_reader = new BufferedReader(new InputStreamReader(is));
// String responseData = IOUtils.toString(bf_reader);
// System.out.print(responseData);
} catch (Exception e) {
e.printStackTrace();
}
答案 2 :(得分:2)
问题是302 HTTP错误,这意味着服务器执行重定向。
如果您将URL从HTTP更改为HTTPS,而不是按预期方式工作。 请求的结果是:
OK
Error code 200
<?xml version="1.0" encoding="UTF-8"?><response><error code="1"><![CDATA[Incorrect password or username]]></error></response>
您可以通过使用http URL评估请求的响应标头来获取重定向地址。在那里,您可以通过检查“位置”键的值来找到重定向URL。
String reUrl = request1.getHeaderField("Location");
System.out.println("Redirect URL "+reUrl);
导致以下输出:
Found
Error code 302
Redirect URL https://loxvo.fogbugz.com/api.asp?cmd=logon&email=myemail&password=mypwd
答案 3 :(得分:1)
尝试使用Scanner将InputStream转换为String。我试过这段代码并且工作正常。
URL url = new URL("http://loxvo.fogbugz.com/api.asp?cmd=logon&email=myemail&password=mypwd");
HttpURLConnection request1 = (HttpURLConnection) url.openConnection();
request1.setRequestMethod("GET");
request1.connect();
InputStream is = request1.getInputStream();
String inputStreamString = new Scanner(is,"UTF-8").useDelimiter("\\A").next();
System.out.print(inputStreamString);