在Java中从URL读取XML字符串

在Java中从URL读取XML字符串,java,xml,rest,url,null,Java,Xml,Rest,Url,Null,我正在以XML格式从restful web服务检索数据,但不幸的是,我的字符串为null。请帮助我,我的代码中的问题在哪里 下面是示例代码: URL url = new URL("http://loxvo.fogbugz.com/api.asp?cmd=logon&email=myemail&password=mypwd"); HttpURLConnection request1 = (HttpURLConnection) url.openConnection(); reques

我正在以XML格式从restful web服务检索数据,但不幸的是,我的
字符串
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);

我在rest客户端中尝试了这个url:它返回了正确的xml,但这里我的
字符串
null
您可以像这样读取响应

 BufferedReader bufferedReader = 
     new BufferedReader(new InputStreamReader(request1.getInputStream()));
        String line;
        while ((line = bufferedReader.readLine()) != null) {
          System.out.print(line);
        }
获取resp 302您的代码。试一试

 URL url = new URL("https://loxvo.fogbugz.com/api.asp?cmd=logon&email=myemail&password=mypwd");

尝试将请求的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();
}

尝试使用扫描仪将InputStream转换为字符串。我试过这个代码,效果很好

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

问题是302HTTP错误,这意味着服务器执行重定向

如果您将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>

这将导致以下输出:

Found
Error code 302
Redirect URL https://loxvo.fogbugz.com/api.asp?cmd=logon&email=myemail&password=mypwd

在浏览器kqpduvm3d9lukegd0431hefc7v27f4中检查相同的内容这是我从客户端和浏览器获得的响应
Found
Error code 302
Redirect URL https://loxvo.fogbugz.com/api.asp?cmd=logon&email=myemail&password=mypwd