post方法中的org.apache.commons.httpclient.NameValuePair

时间:2010-12-24 21:41:27

标签: java apache-commons-httpclient

我正在编写一些代码:

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

所以问题是如何在帖子中找到方括号?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

这称为编码,这就是数据的传输方式。但是,接收数据的服务将对其进行解码。所以你不必担心这个。

您不能在没有编码的情况下发送方括号,因为它们被视为不安全。以下是URL RFC

中的文字
  

不安全:

     

字符对于a来说可能不安全   原因多少。空间
  角色是不安全的,因为   重要的空间可能会消失   可能会引入微不足道的空间   当URL被转录或
时   排版或进行治疗   文字处理程序。该   字符“<”和“>”是不安全的   因为它们被用作
  自由文本中的URL分隔符;   引号(“”“)用于表示   在某些系统中划分URL。该   字符“#”是不安全的,应该是   总是被编码,因为它被使用   在万维网和其他中   用于从中分隔URL的系统   可能的片段/锚标识符   跟着它。字符“%”是   不安全,因为它用于
  其他角色的编码。其他   字符是不安全的,因为
  网关和其他运输代理商   众所周知,有时会修改这样的   字符。这些字符是“{”,   “}”,“|”,“\”,“^”,“〜”,“[”,“]”,   和“`”。

     

所有不安全的角色必须始终   在URL中编码。对于
  例如,字符“#”必须是   甚至在系统中也在URL中编码   通常不会处理的   片段或锚标识符,所以   如果将URL复制到另一个URL中   它会使用它们的系统   没有必要更改URL   编码