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- ]
所以问题是我如何才能在我的帖子中得到方括号?
发布于 2010-12-25 05:46:50
当客户端解析POST主体中的查询字符串时,它应该对这些键和值进行url解码。在web浏览器上用一个简单的HTML POST表单试试,然后用wireshark检查一下。你会看到完全一样的东西。这里没有问题。
发布于 2010-12-25 05:47:27
这称为编码,这就是数据传输的方式。但是,接收数据的服务将在其一端对其进行解码。所以你不需要担心这个问题。
没有编码的,你不能按原样发送方括号,因为它们被认为是不安全的。下面是来自URL RFC的文本
不安全:
由于许多原因,字符可能是不安全的。空间
字符是不安全的,因为有意义的空格可能会消失,
在转录URL时可能会引入无关紧要的空格
排版的或受文字处理程序处理的字符"<“和">”是不安全的,因为它们被用作
自由文本形式的URL两边的分隔符;引号(“)用于
在某些系统中分隔URL。字符"#“是不安全的,应该
始终进行编码,因为它用于万维网和其他
系统从可能跟在其后面的片段/锚标识符分隔URL。字符"%“不安全,因为它用于
其他字符的编码。其他字符是不安全的,因为
众所周知,网关和其他传输代理有时会修改这样的字符。这些字符是"{“、"}”、"|“、"\”、"^“、"~”、"“、"”和"`“。
所有不安全字符必须始终编码在URL中。为
例如,即使在通常不处理片段或锚标识符的系统中,也必须在URL中对字符"#“进行编码,以便如果将URL复制到使用它们的其他系统中,则无需更改URL编码。
https://stackoverflow.com/questions/4528443
复制相似问题