我的端点需要'authenticity_token',其格式如下:
Iq2rNXN+OxERv+s6TSloJfKkPZVvqnWe1m0NfODB5OI=
但是,有时它会有“特殊”字符,例如:
E7IzeP73OgPGgXM/up295ky1mMQMio2Nb8HMLxJFyfw=
这被编码为:
E7IzeP73OgPGgXM%26%2347%3Bup295ky1mMQMio2Nb8HMLxJFyfw%3D
由于某种原因,端点不喜欢这些特殊字符的编码,并认为令牌无效。是否可以添加不编码特定值的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));
答案 0 :(得分:2)
您始终可以使用ByteArrayEntity
或StringEntity
代替UrlEncodedFormEntity
并自行进行编码。它应该看起来像foo=var1&bar=var2
。
您必须设置Content-Type=application/x-www-form-urlencoded
您可能希望找出您的端点期望作为Content-Type标头的application/x-www-form-urlencoded
值的charset参数。然后将其作为参数传递给UrlEncodedFormEntity
构造函数。这应该是正确的解决方案。