调用Apache HttpClient时出现URI异常



我正在使用Apache HttpClient v4.2.2尝试并点击URL,并且正在获得我似乎无法弄清楚的URISyntaxException:

try {
    String uri = "http://a.example.com/12/allrigh/bouncer?my_key1=i[(Gz$xrCcCeaCrHv}[5Ryou4kz@Yh~c@K_if-p7vGQ3ZF[fEpm2SmH(Z6Yh40Ea";
    HttpClient httpClient = new DefaultHttpClient();
    HttpGet httpGet = new HttpGet(uri);
    HttpResponse response = httpClient.execute(httpGet);
} catch(Throwable throwable) {
    // Log & handle
}
Exception in thread "main" java.lang.IllegalArgumentException
    at java.net.URI.create(URI.java:859)
    at org.apache.http.client.methods.HttpGet.<init>(HttpGet.java:69)
    ...
Caused by: java.net.URISyntaxException: Illegal character in query at index 65: http://a.example.com/12/allrigh/bouncer?my_key1=i[(Gz$xrCcCeaCrHv}[5Ryou4kz@Yh~c@K_if-p7vGQ3ZF[fEpm2SmH(Z6Yh40Ea
    at java.net.URI$Parser.fail(URI.java:2825)
    at java.net.URI$Parser.checkChars(URI.java:2998)
    at java.net.URI$Parser.parseHierarchical(URI.java:3088)
    at java.net.URI$Parser.parse(URI.java:3030)
    at java.net.URI.<init>(URI.java:595)
    at java.net.URI.create(URI.java:857)
    ... 6 more

据我所知,第65个字符是"H"…这到底是怎么回事?除了找出我的URI有什么问题之外,下一个显而易见的问题是:我可以做些什么来解决这个问题?我需要对URI进行64进制编码吗?如果有,怎么做?提前感谢!

我不太明白字符是如何计数的,索引65在哪里。但是URL中的无效字符是花括号(参见https://stackoverflow.com/a/7109208/413337)。

为什么你的URL看起来像这样?这些花括号是从哪里来的?

不能对查询参数进行Base64编码,除非服务器希望这样。此外,查询参数看起来已经像是Base64编码的了。但是Base64编码的常规字符集不是url安全的。

URL编码查询参数可能会有帮助。看到URLEncoder。编码(字符串,字符串)。

最新更新