我正在编写一些代码:
PostMethod p = new PostMethod(someurl);
...
NameValuePair[] data = {
new NameValuePair("name1", "somevalue1"),
new NameValuePair("var[3][1]", "10")
};
try {
hc.executeMethod(p);
}
...
当我看到Wireshark中的帖子时,这就是我得到的结果:
POST /someurl HTTP/1.1
...
type=var&ship%5B3%5D%5B1%5D=10
%5B
表示[
,%5D
- ]
所以问题是如何在帖子中找到方括号?
答案 0 :(得分:1)
这正是POST
身体的样子。那些方括号必须是url编码的。当客户端解析POST
正文中的查询字符串时,它应该对这些键和值进行url解码。在Web浏览器上使用简单的HTML POST表单进行尝试,并使用wireshark进行检查。你会看到完全相同的东西。这里没有问题。
答案 1 :(得分:1)
这称为编码,这就是数据的传输方式。但是,接收数据的服务将对其进行解码。所以你不必担心这个。
您不能在没有编码的情况下发送方括号,因为它们被视为不安全。以下是URL RFC
中的文字不安全:
字符对于a来说可能不安全 原因多少。空间
角色是不安全的,因为 重要的空间可能会消失 可能会引入微不足道的空间 当URL被转录或
时 排版或进行治疗 文字处理程序。该 字符“<”和“>”是不安全的 因为它们被用作
自由文本中的URL分隔符; 引号(“”“)用于表示 在某些系统中划分URL。该 字符“#”是不安全的,应该是 总是被编码,因为它被使用 在万维网和其他中 用于从中分隔URL的系统 可能的片段/锚标识符 跟着它。字符“%”是 不安全,因为它用于
其他角色的编码。其他 字符是不安全的,因为
网关和其他运输代理商 众所周知,有时会修改这样的 字符。这些字符是“{”, “}”,“|”,“\”,“^”,“〜”,“[”,“]”, 和“`”。所有不安全的角色必须始终 在URL中编码。对于
例如,字符“#”必须是 甚至在系统中也在URL中编码 通常不会处理的 片段或锚标识符,所以 如果将URL复制到另一个URL中 它会使用它们的系统 没有必要更改URL 编码