从Java中的URL读取XML字符串

时间:2013-12-10 11:01:11

标签: java xml rest url null

我正在以XML格式从restful Web服务检索数据,但不幸的是我的Stringnull。请帮帮我,我的代码中的问题在哪里?

以下是示例代码:

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,但我的Stringnull

4 个答案:

答案 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);