【问题标题】:Apache HttpClient HttpGet url with colon带有冒号的 Apache HttpClient HttpGet url
【发布时间】:2012-05-18 22:04:30
【问题描述】:

我正在尝试在我的一个参数中发出带有冒号的 get,但它以 unknownHostException 失败,这是我的代码:

String id = "{\"ID\":\"John Doe\"}";
String encodedID = URLEncoder.encode(id, "UTF-8").replace("+", "%20");
endpoint="https://127.0.0.1/getResourceNameToUse?id=" + encodedID;
HttpResponse response = new HttpResponse();
HttpGet httpget = new HttpGet(endpoint);
response = httpclient.execute(httpget, new RESTResponseHandler());

我收到以下错误:

java.net.UnknownHostException: 127.0.0.1/getResourceNameToUse?id={"ID"

因此,冒号似乎破坏了获取请求。有没有办法来解决这个问题?为什么编码它不能解决问题?我的编码 id 如下所示:

%7B%22ID%22%3A%22约翰%20Doe%22%7D

【问题讨论】:

  • 我能够通过对冒号进行双 url 编码来修复它: String id = id.replace(":","%3A");

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


【解决方案1】:

当我运行您的代码的近似值时,您生成的 URL 是:

https://127.0.0.0/getResourceNameToUse?id=%7B%22ID%22%3A%22John%20Doe%22%7D

据我所知,这是一个绝对有效的 URL。我看不到任何: 字符会混淆HttpClient。我们来看看异常:

java.net.UnknownHostException: 127.0.0.0/getResourceNameToUse?id={"ID"

在我看来,不是使用您的编码 URL,因为它显示的是 {"ID,而不是 %7B%22ID%22。您帖子中的代码是否有可能不是完全您正在运行的代码?

我还注意到您将访问 IP 127.0.0.0。您是否希望 127.0.0.1 连接到 localhost?

【讨论】:

  • 对不起,本地主机地址上的错字。我实际上是在打另一个地址,但不想发布它。就网址而言,正如您所看到的,它与我发送的完全一样。 httpclient 在我发送它之前一定已经对其进行了解码,因为我必须对冒号进行双重 url 编码。
  • 您可以将您的代码 sn-p 发布到pastebin.com@ferics2 吗?我真的很感兴趣。
  • 我尝试了相同的代码,没有遇到任何问题。然而,HttpClient 3.1 就是这样。您似乎使用的是早期版本。然而,我不敢相信它会解码传递给它的 URL。 @ferics 发生了其他事情。
  • 可能是我们使用的客户端版本。我们在 httpclient-4.1-beta1 上。我很高兴我能够让它工作:)
【解决方案2】:

我能够通过对冒号进行双 url 编码来修复它:

String id = "{\"ID\":\"John Doe\"}";
id = id.replace(":","%3A");
String encodedID = URLEncoder.encode(id, "UTF-8").replace("+", "%20");
endpoint="https://127.0.0.1/getResourceNameToUse?id=" + encodedID;
HttpResponse response = new HttpResponse();
HttpGet httpget = new HttpGet(endpoint);
response = httpclient.execute(httpget, new RESTResponseHandler());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-17
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多