HttpURLConnection - 返回格式

Posted

技术标签:

【中文标题】HttpURLConnection - 返回格式【英文标题】:HttpURLConnection - returned format 【发布时间】:2013-03-17 11:49:12 【问题描述】:

我正在使用 HttpUrlConnection 来使用 REST 服务。当我执行 GET 时,就像我在下面展示的那样,我不想获取按字符返回的信息。我想以返回的格式获得结果。例如,在这里,我想获得一个布尔值,而不是像 System.out.print((char) ch); 这样的东西。我怎样才能收到它?

我知道我可以将 String 解析为 Boolean 类型,但是如果我收到另一种数据类型呢?

public class SensorGetDoorStatus 

public static void main(String[] args) throws Exception

    HttpURLConnection urlConnection = null;

try 
    String webPage = "http://localhost:8080/LULServices/webresources/services.sensors/doorstatus";
            String name = "xxxx";
    String password = "xxxx";

            Authenticator myAuth = new Authenticator() 
            
              final String USERNAME = "xxxx";
              final String PASSWORD = "xxxxx";

              @Override
              protected PasswordAuthentication getPasswordAuthentication()
              
                return new PasswordAuthentication(USERNAME, PASSWORD.toCharArray());
              
            ;

            Authenticator.setDefault(myAuth);

    String authString = name + ":" + password;
    byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
    String authStringEnc = new String(authEncBytes);

    URL urlToRequest = new URL(webPage);
    urlConnection = (HttpURLConnection) urlToRequest.openConnection();

    urlConnection.setRequestProperty("Authorization", "Basic " + authStringEnc);
    System.out.println("Authorization : Basic " + authStringEnc);

    urlConnection.setRequestMethod("GET");
    urlConnection.setRequestProperty("Accept", "application/json");                
    urlConnection.setReadTimeout(15*1000);
    urlConnection.connect();

    InputStream inStrm = urlConnection.getInputStream();

    int ch;
    while (((ch = inStrm.read()) != -1))
         System.out.print((char) ch);
    inStrm.close(); 


 catch (MalformedURLException e) 
        e.printStackTrace();
 catch (IOException e) 
        System.out.println("Failure processing URL");
        e.printStackTrace();
 catch (Exception e) 
        e.printStackTrace();
    

    finally 
    if (urlConnection != null) 
        urlConnection.disconnect();
    

 

【问题讨论】:

你能和InputStream inStrm一起玩吗 看看this SO answer。 【参考方案1】:

我会尝试使用BufferedReader:它允许逐行读取InputStream,您也许可以这样解析您的数据。

如果您的数据采用 XML 或 JSON 等预定义格式,那么您最好使用库来解析您的响应数据。

【讨论】:

【参考方案2】:

您可能想看看如何使用 DataInputStream。你可以使用这个类的readBoolean方法来读取一个布尔值。

DataInputStream 和 DataOutputStream 还为您提供了写入和读取特定数据类型的方法,例如 int、float、long 等

您应该在发送数据的另一端写入 DataOutputStream 类的 writeBoolean。

代码如下所示:

 InputStream inStrm = urlConnection.getInputStream();
 DataInputStream doi = new DataInputStream(inStrm);
 boolean bol = doi.readBoolean();

  doi.close();
  inStrm.close(); 

【讨论】:

以上是关于HttpURLConnection - 返回格式的主要内容,如果未能解决你的问题,请参考以下文章

HttpURLConnection 提交表单,没响应

Android 返回空字符串 HTTP

HttpUrlConnection.getInputStream 在 Android 中返回空流

HttpURLConnection发送和接受返回值

HttpURLConnection.getResponseCode() 在第二次调用时返回 -1

HttpURLConnection 返回汉字乱码(全是问号)