我正在使用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。编码(字符串,字符串)。