1

我正在使用 ApacheHttpClient 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 进行 base-64 编码吗?如果是这样,怎么做?提前致谢!

4

1 回答 1

2

我不太明白如何计算字符以及索引 65 的位置。但是您的 URL 中的无效字符是大括号(请参阅https://stackoverflow.com/a/7109208/413337)。

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

除非服务器期望这样,否则您不能对查询参数进行 Base64 编码。此外,查询参数看起来好像是 Base64 编码的。但是 Base64 编码的常规字符集不是 URL 安全的。

对查询参数进行 URL 编码可能会有所帮助。请参阅URLEncoder.encode(String, String)

于 2012-12-27T21:38:07.957 回答