Apache HttpGet url编码问题(加号,+)

时间:2011-09-06 04:44:00

标签: java android url-encoding apache-httpclient-4.x

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


1。 如果我传递query参数字符串未编码,就像这样

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

然后+符号未被编码,并且它作为服务器上的空间被接收。网址的其余部分编码正常。

2.如果我在query字符串中对参数进行编码,就像这样

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

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

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

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

然后,当HttpClient执行GET时,%B2被编码


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

2 个答案:

答案 0 :(得分:2)

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

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

应该像这样创建它

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

URIUtils类的目的是

  

URI的实用程序集合,用于解决内部的错误   类

没有评论........

答案 1 :(得分:0)

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