java - 通过 Java 应用程序和 Chrome 的 POSTMAN 扩展发送 POST 请求时的行为不同。如何调试并发现错误?

标签 java servlets post

我正在向服务器发出 POST 请求,并将 Content-Type 设置为 application/x-www-form-urlencoded。其中一个查询参数的值中包含 &。在发送请求之前,我将 & 替换为 &

当我使用 POSTMAN(Chrome 扩展)发送此请求时,请求正常并且我收到了预期的响应。但是当我使用 Java 应用程序发送此请求时,服务器会抛出错误(无法解析文档)。这是我用来发送请求的代码:

URL url = new URL(url); // url => "http://myserver.com/api/update"

HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setConnectTimeout(60000);
urlConnection.setReadTimeout(60000);
urlConnection.setDoOutput(true);
urlConnection.setRequestMethod("POST");
urlConnection.setDoInput(true);
urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

PrintWriter printWriter = new PrintWriter(urlConnection.getOutputStream());
printWriter.print(params); // params => api_key=abcd123&update_data_id=123&update_data_value=Test&Value
printWriter.flush();

InputStream inputStream = urlConnection.getInputStream();
String contentType = urlConnection.getContentType();

FileUtil.closeWriter(printWriter);

// Parse response ...

这里,问题出现在参数update_data_value中。如果我删除 &,则 POSTMAN 和我的应用程序的请求都会正常。但是当 & 存在时,只有通过 POSTMAN 的请求才能正常工作。

可能出了什么问题?

非常感谢您的帮助!

最佳答案

经过长时间的聊天,问题是这样的:

它与 XML 字符串有关,其中使用了 & 符号。根据 XML 标准,& 符号需要替换为“&”。

此 XML 字符串需要在 POST 请求中发送,因此 & 符号和可能的分号需要转义。

最终的替换字符串如下所示:“%26amp%3B”。

关于java - 通过 Java 应用程序和 Chrome 的 POSTMAN 扩展发送 POST 请求时的行为不同。如何调试并发现错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24991804/

相关文章:

java - 反编译minecraft服务器时出现Windows错误: Error 5,

java - 初学java关于使用for循环、if语句和while循环的问题

java - 无法让 Glassfish 使用版本 7 编译 JSP

java - 如果有对象引用,Java Session 会过期吗?

android - 如何为单个 Facebook 消息帖子提供不同的多个 url 超链接

java - 广播接收器未启动服务

使用 BufferedInputStream 读取大文件时 Java 文件 IO 被截断

java.io.FileNotFoundException : (No such file or directory) - Working with servlets 错误

javascript - 请求库 POST 请求获取 http 450 错误

mysql - 如何使用两个分类条件过滤wordpress选择查询?