- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想在我的 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/
我们有网络服务器,仅接受来自 Android 手机的解码值 例如 “http://www.url.com/data/?name=hello World” 返回预期结果 但是当我们尝试使用时 “http
我正在尝试在 java 中发出 POST 请求,但这没有按预期工作。 已关注 this post ,这是我目前拥有的代码 UrlEncodedFormEntity entity = new UrlEn
我想在我的 Android 设备上使用远程 API,但出于某种原因,UrlEncodedFormEntity 类不会将 _ 转换为 %5f 就像远程 API 似乎期望的那样。因此,使用此代码: Lis
我正在尝试将数据发送到服务器。也就是说,一些字符串字段和一个图像,它被编码为 base64 并作为一个字符串传递,如下所示: ByteArrayOutputStream stream = new By
图像通常需要特殊的 HTTP header ,例如: Content-disposition: attachment; filename="file2.jpeg" Content-type: imag
我正在使用 Apache HttpClient 与 WS 连接。一切正常,但是当应用程序尝试发送大尺寸的帖子时,它就崩溃了。 我像这样取消 HttpClint: 将 XML 发布到 REST WS 这
我有一个要上传的文件,所以我有这样的标准 MultipartEntityBuilder: MultipartEntityBuilder multiPartEntity = MultipartEntit
有几个问题讨论了如何使用 multipart/form-data 数据格式将进度指示添加到 Android 中的 HTTP 文件上传。建议的典型方法集中在 Can't grab progress on
我们如何在UrlEncodedFormEntity中传递HashMap参数?或者如何解决? 最佳答案 我想你的意思是这样的: HashMap values = ....; ArrayList para
如果您想使用参数执行 HTTP Post 并以“x-www-form-urlencoded”内容类型发送它,那么在 Apache HTTP Client 3 中执行此操作的方法是... Htt
我正在创建一个单元测试来试用我刚刚创建的 servlet。 @Test public void test() throws ParseException, IOException { HttpCl
您好,我正在尝试将 ArrayList 作为 POST 请求的参数从我的 Android 应用程序发送到服务器。到目前为止,我有这段代码: HttpResponse response;
我有一个已经采用正确 URLEncoded 格式的字符串,我想通过 Android 上的 POST 请求将其发送到 PHP 服务器。我知道在 Android 上发送 URL 编码表单的方法使用 Url
我正在使用jReddit包装器制作Reddit应用程序,但在Apache HTTP客户端抛出上述异常时遇到了麻烦。我的依赖关系如下所示: 我的库看起来像这样: 我曾在SO上看到过类似类似异常的其他问题
我正在尝试通过调用网络服务上传设备摄像头拍摄的图像,服务器代码使用 PHP。 首先我将位图转换为字符串 ByteArrayOutputStream stream = new ByteArrayOutp
我是一名优秀的程序员,十分优秀!