gpt4 book ai didi

java - UrlEncodedFormEntity 不编码下划线

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:09:22 29 4
gpt4 key购买 nike

我想在我的 Android 设备上使用远程 API,但出于某种原因,UrlEncodedFormEntity 类不会将 _ 转换为 %5f 就像远程 API 似乎期望的那样。因此,使用此代码:

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
nameValuePairs.add(
new BasicNameValuePair("json",
"{\"params\":{\"player_name\":\"Toto\",
\"password\":\"clearPass\"},
\"class_name\":\"ApiMasterAuthentication\",
\"method_name\":\"login\"}")
);
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8));
ResponseHandler responseHandler = new BasicResponseHandler();
httpClient.execute(httpPost, responseHandler);

向服务器发送一个post请求,内容如下:

json=%7B%22params%22%3A%7B%22player_name%22%3A%22Toto%22%2C%22password%22%3A%22clearPass%22%7D%2C%22class_name%22%3A%22ApiMasterAuthentication%22%2C%22method_name%22%3A%22login%22%7D

我希望它是这样的(用 %5F 替换前面的下划线):

json=%7B%22params%22%3A%7B%22player%5Fname%22%3A%22Toto%22%2C%22password%22%3A%22clearPass%22%7D%2C%22class%5Fname%22%3A%22ApiMasterAuthentication%22%2C%22method%5Fname%22%3A%22login%22%7D

我对API没有控制权,API的官方客户端是这样的。这似乎是 URL normalization 的预期行为

我错过了什么吗?我一开始以为是UTF-8编码的问题,但是在UrlEncodedFormEntity的构造函数中添加HTTP.UTF-8并没有解决问题。

感谢您的帮助。

编辑: 最后,问题不是来自这个 unescape 下划线。即使我试图重现该行为的其他客户端逃脱了它,我也只需要设置正确的 header :

httpPost.addHeader("Content-Type","application/x-www-form-urlencoded");

而且请求工作得很好。感谢大家,尤其是 singh.jagmohan 的帮助(即使问题最终出在别处)!

最佳答案

“_”不是 url 的保留符号。

设置:Content-Type:application/x-www-form-urlencoded'

应该可以解决问题。否则你可以尝试更换它,如果你真的需要这个选项:

String.Replace("_", "%5f");

参见 percent encodeing , replace

关于java - UrlEncodedFormEntity 不编码下划线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21241230/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com