Exception in thread "main" java.lang.IllegalArgumentException: Illegal character in query at index x

HttpClient:

超文本传输​​协议(HTTP)可能是当今互联网上使用的最重要的协议。Web服务,启用网络的设备和网络计算的增长继续扩展了HTTP协议在用户驱动的Web浏览器之外的作用,同时增加了需要HTTP支持的应用程序的数量。

Exception in thread "main" java.lang.IllegalArgumentException: Illegal character in query at indexxx. 在请求第三方接口时发生了如下错误,并且参数格式都是正确的,通过翻阅一些资料,定位是请求前进行编码。

代码如下:

public static String post(String url , Map params) throws Exception {
        //String encode = URLEncoder.encode(JSON.toJSONString(params),"UTF-8");
        HttpClient client = HttpClients.createDefault();
        HttpPost httppost = new HttpPost(new StringBuilder().append(url+JSON.toJSONString(params).toString());
        logger.info(String.format("URI:%s",httppost.getURI()));
        HttpResponse res = client.execute(httppost);
        String result ="";
        HttpEntity entity = res.getEntity();
        if (entity != null)
            result = EntityUtils.toString(entity, "UTF-8");
        return result;
    }
错误:Exception in thread "main" java.lang.IllegalArgumentException: Illegal character in query at index 6.....

原因:参数需要编码后然后发送请求,完整代码如下:

public static String post(String url , Map params) throws Exception {
        String encode = URLEncoder.encode(JSON.toJSONString(params),"UTF-8");
        HttpClient client = HttpClients.createDefault();
        HttpPost httppost = new HttpPost(new StringBuilder().append(url+encode).toString());
        logger.info(String.format("URI:%s",httppost.getURI()));
        HttpResponse res = client.execute(httppost);
        String result ="";
        HttpEntity entity = res.getEntity();
        if (entity != null)
            result = EntityUtils.toString(entity, "UTF-8");
        return result;
    }

编码后的参数打印在控制台了:URI:http://xxxx:8080/testmethod=test&params=%7B%22vo%22%3A%7B%22shownum%22%3A

由于太长以上copy了一部分。

还有一种方式来请求:

URI uri = new URIBuilder()  
        .setScheme("http")  
        .setHost("www.google.com")  
        .setPath("/search")  
        .setParameter("q", "httpclient")  
        .setParameter("btnG", "Google Search")  
        .build();  
HttpGet httpget = new HttpGet(uri);  
更多可查看: 点击打开链接





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值