的Java的Apache了HTTPClient不编码POST实体

问题描述:

我需要一个端点的“authenticity_token”这是在像格式:的Java的Apache了HTTPClient不编码POST实体

Iq2rNXN+OxERv+s6TSloJfKkPZVvqnWe1m0NfODB5OI= 

但是,它也有“特”字,如:

E7IzeP73OgPGgXM/up295ky1mMQMio2Nb8HMLxJFyfw= 

这被编码为:

E7IzeP73OgPGgXM%26%2347%3Bup295ky1mMQMio2Nb8HMLxJFyfw%3D 

出于某种原因,端点不喜欢编码Ø f那些特殊字符会认为该标记无效。是否可以添加不编码特定值的POST变量?我目前正在做这样的事情:

HttpPost post = new HttpPost(URL + NEW_FINDING); 
    List <NameValuePair> nvps = new ArrayList <NameValuePair>(); 
    nvps.add(new BasicNameValuePair("foo", foo)); 
    nvps.add(new BasicNameValuePair("authenticity_token", authenticityToken)); 
    post.setEntity(new UrlEncodedFormEntity(nvps)); 

您可以随时使用的UrlEncodedFormEntityByteArrayEntityStringEntity,而不是和自己做的编码。它应该看起来像foo=var1&bar=var2
您必须设置Content-Type=application/x-www-form-urlencoded
您可能需要了解您的端点期望作为Content-Type标头的application/x-www-form-urlencoded值的字符集参数。然后将其作为参数传递给UrlEncodedFormEntity构造函数。这应该是正确的解决方案。

+0

问题是,id喜欢使用其余参数的UrlEncodedFormEntity,我只需要能够使authenticity_token不被编码... – wuntee 2013-02-15 01:10:07

+0

只需使用第一个选项:ByteArrayEntity或StringEntity with Content-Type =应用/ X WWW的窗体-urlencoded。 UrlEncodedFormEntity完成此操作,但它为您编码参数。 – jdb 2013-02-15 01:20:29