在用httpclient的POST请求时,出现以下错误。
Exception in thread "main" java.lang.IllegalArgumentException: Invalid uri 'http://xxxxxx': Invalid query
at org.apache.commons.httpclient.HttpMethodBase.<init>(HttpMethodBase.java:222)
at org.apache.commons.httpclient.methods.ExpectContinueMethod.<init>(ExpectContinueMethod.java:93)
at org.apache.commons.httpclient.methods.EntityEnclosingMethod.<init>(EntityEnclosingMethod.java:119)
at org.apache.commons.httpclient.methods.PostMethod.<init>(PostMethod.java:106)
at com.senxing.main.JsonTest.main(JsonTest.java:33)
出现了Invalid uri 和 Invalid query 应该就是接口地址中含有了特殊符号,发现url中出现了“|”这个符号,但是这个符号也不能删除掉。为什么会出现这个问题呢?
这是因为有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了。
所以我们要想办法进行这些符号的转码,而java.net包中的URLEncoder.encode("\\\\|","utf-8")可以解决掉这个问题。也就是将特殊字符重新进行UTF-8编码。
这是我原来要请求的接口地址出现"|"的地方:&from=database¶ms=t3:208|t6&
现在改成&from=database¶ms=t3:208"+URLEncoder.encode("\\\\|","utf-8")+"t6& //注:首先对"|"进行了转义。
再请求测试,问题完美解决。
特殊字符有好多,都可以通过这样的方法来解决。