java.lang.IllegalArgumentException: Invalid uri 'http://xxxxxx' : Invalid query 异常通过URLEncoder来解决。

在用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&params=t3:208|t6&

现在改成&from=database&params=t3:208"+URLEncoder.encode("\\\\|","utf-8")+"t6&       //注:首先对"|"进行了转义。

再请求测试,问题完美解决。

特殊字符有好多,都可以通过这样的方法来解决。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值