ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-11-18 22:05:43  阅读:180  来源: 互联网

标签:传参 stringBuffer 接口 result Https append 进行


**场景:在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见:

标签:传参,stringBuffer,接口,result,Https,append,进行
来源: https://blog.csdn.net/weixin_45375866/article/details/121410686

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有