http - 发送转义字符串(如“&#”)时得到 HTTP 响应代码 400
问题描述
我以这种方式将 XML 的内容发送到 HTTP 服务器:
URL obj = new URL(targetURL);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("Content-Length", ""
+ Integer.toString(urlParameters.getBytes().length));
con.setRequestProperty("Content-Language", "de-DE");
con.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
wr.writeBytes(urlParameters);
wr.flush();
wr.close();
int responseCode = con.getResponseCode();
字符串 urlParameters 的内容为:
mydata=<1000chars of XML content>@mydata=<1000chars of XML content>&...&mydata=<the rest chars of XML content>
测试用例:
如果urlParameters不包含加号 (+) 等特殊字符,则可以正常工作;
如果urlParameters包含加号 (+),则 HTTP 服务器上缺少加号;
如果加号替换为转义字符串 + ,客户端得到错误代码400:
原因:java.io.IOException:服务器返回 HTTP 响应代码:400 用于 URL: http: //192.168.101.51 :80810/abs/P42t/bwb.receive_sync at sun.net.www.protocol.http.HttpURLConnection.getInputStream0 (HttpURLConnection.java:1894) 在 sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492) 在 java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480)
我的问题:
- 为什么加号不见了?(更新:原因是韩评论加号被认为是URL中的空格)
- 字符串 + 以这种方式发送到HTTP服务器?
谢谢。
解决方案
推荐阅读
- azure - Microsoft Azure API 管理 - 缓存策略不起作用
- reactjs - 如何安装节点 sass?
- c# - 随机排序的 IEnumerable 每次使用时都会更改顺序,而不是重新排序一次
- c - 当 malloc 变量也被分配给另一个变量时,我应该如何释放它?(C 语言)
- bash - 在 Bash 脚本中传递参数时出现 Veeam CLI 未知参数
- android - 带有非 android 项目的回购
- macos-big-sur - 带有 Big Sur 的基于 ARM 的 M1 Mac 上的 Postgres 错误
- php - 有没有办法从另一个表中获取基于 id 的嵌套 Eloquent 模型?
- bit-manipulation - 为什么按位与和按位异或的和等于按位或?
- android - ProgressDialog onProgressUpdate 得到错误“DecorView:mWindow.mActivityCurrentConfig 为空”