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を参照)。

URL がこのようになっているのはなぜですか? これらの中括弧はどこから来たのですか?

サーバーが要求しない限り、クエリ パラメータを Base64 でエンコードすることはできません。さらに、クエリ パラメータはすでに Base64 でエンコードされているように見えます。ただし、Base64 エンコーディングの通常の文字セットは URL セーフではありません。

クエリ パラメータの URL エンコードが役立つ場合があります。URLEncoder.encode(String, String)を参照してください。

于 2012-12-27T21:38:07.957 に答える