繁体   English   中英

如何从HttpURLConnection POST获得响应

[英]How to get response from HttpURLConnection POST

我正在尝试将POST(主体中包含XML)发送到API,并获得返回的XML响应。 我需要从响应主体(从ERROR元素内)获取确认或错误的详细信息。

我可以发送POST,它确实会触发API中的更改,但是我无法读取响应。

当我从邮递员手动发送POST时,我触发了API的更改,并且可以看到来自API的响应为text/html;charset=charset=utf-8

这是我当前的代码:

      URL url = new URL(urlString);

        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setDoOutput(true);

        OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());

        writer.write(xmlString);
        writer.flush();
        String line;
        BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
        writer.close();
        reader.close();

响应主体应采用以下格式:

<Root>
    <Session>
        <UserId>theUserID</UserId>
        <Password>thePassword</Password>
        <ERROR Status="0" Description="Logon Successful" />
    </Session>
    <ActivityList>
        <Activity Type="ReqUp" Incident="12345" ElapsedTime="350" 
      Description="example response" 
      Status="Complete">
            <ERROR Status="0" Description="OK" />
        </Activity>
    </ActivityList>
</Root>

当前/实际结果:
line显示为null

由于您希望xml从服务器返回,因此可能需要在请求中添加“ accept”标头,以告知服务器您(客户端)将“接受” xml。 从您的帖子中看来,默认值为html。

这可能对您有用:

  URL url = new URL(urlString);

  HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  conn.setRequestProperty("accept", "application/xml");
  conn.setDoOutput(true);

  OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());

如果要将xml发送到服务器,则可能还需要添加“ content-type”标头,如下所示:

  conn.setRequestProperty("content-type", "application/xml");

参考: https : //www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

我的原始代码中存在一个错误,该错误阻止line形成除null以外的任何内容。

正确的代码如下:

        URL url = new URL(urlString);

        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestProperty("accept", "text/html");


        conn.setDoOutput(true);

        OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());

        writer.write(xmlString);
        writer.flush();
        String builtResponse = "";
        String line ="";
        BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        while ((line = reader.readLine()) != null) {
            builtResponse += line;
        }
        writer.close();
        reader.close();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM