1

我正在编写一些代码,例如:

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-]

所以问题是我怎样才能在我的帖子中得到方括号?

4

2 回答 2

1

这正是POST身体应该看起来的样子。这些方括号必须是 url 编码的。当客户端解析POST正文中的查询字符串时,它应该对这些键和值进行 url 解码。在 Web 浏览器上使用简单的 HTML POST 表单进行尝试,然后使用 wireshark 进行检查。你会看到完全一样的东西。这里没有问题。

于 2010-12-24T21:46:49.533 回答
1

这称为编码,这就是数据传输的方式。但是,接收数据的服务将在其端对此进行解码。因此,您无需担心这一点。

您不能在没有编码的情况下按原样发送方括号,因为它们被认为是不安全的。以下是来自URL RFC的文本

不安全:

由于多种原因,字符可能不安全。空格
字符是不安全的,因为
当 URL 被转录或
排版或经受文字处理程序的处理时,重要的空格可能会消失,并且可能会引入无关紧要的空格。字符“<”和“>”是不安全的,因为它们被用作
自由文本中 URL 的分隔符;在某些系统中,引号 (""") 用于
分隔 URL。字符 "#" 是不安全的,应
始终进行编码,因为它在万维网和其他
系统中用于将 URL 与片段/锚定分隔开可能跟在它后面的标识符。字符“%”是不安全的,因为它用于
其他字符的编码。其他字符是不安全的,因为
已知网关和其他传输代理有时会修改这些字符。这些字符是“{”、“}”、“|”、“\”、“^”、“~”、“[”、“]”和“`”。

所有不安全的字符必须始终在 URL 中进行编码。例如
,即使在通常不处理片段或锚标识符的系统中,字符“#”也必须在 URL 中编码,因此如果将 URL 复制到另一个使用它们的系统中,则无需更改网址编码。

于 2010-12-24T21:47:27.270 回答