Https协议接口传参含有“+”导致传参失败处理(两种方式)

**场景:在Jmeter工具中调用java脚本进行接口测试,在在线协商过程中出现一个偶发性的问题,时而接口调用成功,时而接口调用失败(在入参不变的情况下),后来进行分析,发现这个由于使用HttpClient存在的一个弊端,使用参数化形式进行传参的时候,如果参数中含有“+”时被当成空格进行,导致传参错误,从而接口调用失败。
**

例:https://localhost:8890/login?userName="admin"&password="adsdwejhibhbvwqw=scdx+156asas"

方法一(基于HttpClient):针对这种情况,手动将“+”修改为“%2B”后进行传参,或者编写一个函数进行处理
https://localhost:8890/login?userName="admin"&password="adsdwejhibhbvwqwscdx%2B156asas";
此时后端使用web框架取参数,通常会自动进行URLdecode操作,不需要显示的去解码。
常见的特殊字符对应的URL编码如下:
在这里插入图片描述

方法二(推荐):这个问题是http/https协议参数化不支持“+”,后来考虑编写一段函数进行处理这种偶发性问题,但并没有这么做,因为发现基于HttpClientUtils进行Http/Https协议请求的封装不仅可以解决这个问题,还有效的进行传参(主要函数)。

private static String buildUrl(Map<String,String> map){
        if(MapUtils.isEmpty(map)){
            return "";
        }
        StringBuilder stringBuffer = new StringBuilder();
        stringBuffer.append('?');
        for(Map.Entry<String,String> stringStringEntry : map.entrySet()){
            stringBuffer.append(stringStringEntry.getKey()).append('=').append(stringStringEntry.getValue()).append('&');
        }
        String result = stringBuffer.toString();
        //去掉结尾的连接符
        if (!StringUtils.isEmpty(result)){
            result = result.substring(0,result.length()-1);
        }
        return result;
    }

详细的HttpClientUtils见:HttpClientUtils协议封装

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闲小憨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值