java - 如何从 HttpURLConnection POST 获得响应
问题描述
我正在尝试将 POST(正文中包含 XML)发送到 API 并返回 XML 的响应。我需要从响应正文(从ERROR
元素内)获取确认或错误详细信息。
我可以发送 POST 并且它确实触发了 API 的更改,但我无法读取响应。
当我从 Postman 手动发送 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 从服务器返回,因此您可能需要在请求中添加“接受”标头以告诉服务器您(客户端)将“接受”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 发送到服务器,您可能还需要添加“内容类型”标头,如下所示:
conn.setRequestProperty("content-type", "application/xml");
推荐阅读
- r - 从r中的多个列表制作二进制(存在/不存在)数据矩阵
- arduino - 缩放图形处理2.2.1
- javascript - 关闭腻子窗口时机器人关闭
- google-app-engine - Ktor App 部署到 AppEngine 时未调用 Main 方法
- c++ - 从 CSV 数据文件中读取,尝试仅提取我需要的内容时出错
- oracle - 将一个用户的表导入其他用户的表
- ios - AppIcon 无法在 IOS 上使用 xamarin / Visual Studio Mac 显示,但可以使用 xcode
- android - Android Studio:从模板创建活动会导致不希望的格式化清单文件
- angular - 从 Angular 组件中的 Firebase 访问值
- python-3.x - 结合 tf-idf 与目标/均值编码进行多类分类