3

我正在使用 HttpClient 发送 GET 请求,+但未编码。


1.如果我像这样传递query未编码的参数字符串

URI uri = new URI(scheme, host, path, query, null);
HttpGet get = new HttpGet(uri);

然后+符号不被编码,它在服务器上作为空格接收。url 的其余部分编码良好。

query2.如果我像这样对字符串中的参数进行编码

param = URLEncoder.encode(param,"UTF-8");

然后我在服务器上得到一堆奇怪的符号,可能是因为url被编码了两次。

3.如果我只+%B2这样替换

query = query.replaceAll("\\+","%B2");

然后%B2在 HttpClient 执行 GET 时进行编码


如何使用 Apache HttpClient 正确编码 Get 参数并确保+也已编码?

4

2 回答 2

3

好的,解决方案是,而不是像这样创建 URI

URI uri = new URI(scheme, host, path, query, null);

应该像这样创建它

URIUtils.createURI(scheme, host, -1, path, query, null);

URIUtils 类的目的是

一组用于 URI 的实用程序,用于解决类中的错误

没有意见........

于 2011-09-07T06:38:20.760 回答
-1

构建query字符串时,请使用URLEncoder.encode(paramValue, "UTF-8")每个参数值。然后当你发送请求时,使用URLDecoder.decode(paramValue, "UTF-8")和“奇怪的符号”将被解码。

于 2011-09-06T14:16:24.477 回答