2013-12-10 31 views
4

我以XML格式从稳定的Web服务检索数据,但不幸的是我的Stringnull。请帮助我,我的代码中的问题在哪里?从Java中的URL读取XML字符串

下面是示例代码:

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

回答

2

您可以阅读响应像

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"); 
+0

其再次空 –

+0

检查浏览器 – vels4j

+0

同一耶其返回给我正确的XML –

2

试试只是直接传递请求的InputStream IOUtils.toString(), 因为IOUtils.toString使自身的缓冲。

此外,如果请求 已成功或存在任何类型的Http错误,您可以使用request1.getResponseCode()进行检查。

此外,不需要调用connect()方法,因为在getInputStream()调用中隐式地执行了 。

更新:也得到错误302.当然我d'ont有正确的登录数据。但该请求必须使用以下代码:

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(); 
} 
1

尝试使用扫描仪将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); 
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请求的响应头得到重定向地址。您可以通过检查密钥“位置”的值来找到重定向网址。

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