我正在向服务器发出 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/