我正在向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参数并确保+
也被编码?
答案 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")
并解码“奇怪的符号”。