首页 > 解决方案 > 发送转义字符串(如“&#”)时得到 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>

测试用例:

  1. 如果urlParameters不包含加号 (+) 等特殊字符,则可以正常工作;

  2. 如果urlParameters包含加号 (+),则 HTTP 服务器上缺少加号;

  3. 如果加号替换为转义字符串 + ,客户端得到错误代码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)

我的问题:

  1. 为什么加号不见了?(更新:原因是韩评论加号被认为是URL中的空格)
  2. 字符串 + 以这种方式发送到HTTP服务器?

谢谢。

标签: httpescapingspecial-charactershttp-status-code-400

解决方案


推荐阅读