【问题标题】:Apache HttpGet url encoding problem (plus sign, +)Apache HttpGet url 编码问题(加号、+)
【发布时间】:2011-11-11 00:24:51
【问题描述】:

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


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

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

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

2.如果我像这样编码query字符串中的参数

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

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

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

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

那么%B2在HttpClient执行GET的时候被编码


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

【问题讨论】:

  • 您检查过这个question 及其答案了吗?
  • 这个问题是指HttpClient 3,我使用的是Android支持的HttpClient 4。

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


【解决方案1】:

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

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

应该像这样创建它

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

URIUtils 类的目的是

一组 URI 实用程序,用于解决 类

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 是的。也许我误解了你在找什么。如果您对值进行编码,提交请求,然后服务器将它们解码并可以恢复为原始值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多