我正在使用Apache HttpClient v4.2.2
来尝试点击一个网址,并且得到一个我似乎无法弄明白的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编码吗?如果是这样,怎么样?提前谢谢!
答案 0 :(得分:1)
我不太明白如何计算字符以及索引65的位置。但是,您网址中的无效字符是大括号(请参阅https://stackoverflow.com/a/7109208/413337)。
为什么您的网址如下所示?这些花括号来自哪里?
您不能对查询参数进行Base64编码,除非服务器期望它。此外,查询参数看起来好像是Base64编码的。但是Base64编码的常规字符集不是URL安全的。
编码查询参数的URL可能会有所帮助。请参阅URLEncoder.encode(String, String)。