JMeter中如何发送值包含::的查询参数?
在JMeter中发送包含::的查询参数值的解决方案
我们有一个GET API,请求URL如下:
https://sampledomain.com/api?bucket=abc&table=xyz&filters=uuid::12367d-ae0b-44b5-9813-zxzxzx6c00000,anotheruuid::324,date::2022-04-01|2022-04-06,uuid3::1BABFPDT
其中filters参数的值是用逗号分隔的key::value对,以双冒号::作为分隔符。在Postman中调用该API正常,但在JMeter中返回400错误——无论直接在URL路径中添加参数,还是通过参数列表配置,无论开启或关闭URL编码,JMeter都会将:编码为%3A,最终发送的请求URL变为:
https://sampledomain.com/api?bucket=abc&table=xyz&filters=uuid%3A%3A12367d-ae0b-44b5-9813-zxzxzx6c00000%2Canotheruuid%3A%3A324%2Cdate%3A%3A2022-04-01%7C2022-04-06%2Cuuid3%3A%3A1BABFPDT
以下是可行的解决方法:
1. 单独控制目标参数的编码
- 在JMeter的HTTP请求中,拆分配置:
- 「路径」栏仅填写
/api - 切换到「参数」面板,添加以下参数:
- 参数名
bucket,值abc - 参数名
table,值xyz - 参数名
filters,值uuid::12367d-ae0b-44b5-9813-zxzxzx6c00000,anotheruuid::324,date::2022-04-01|2022-04-06,uuid3::1BABFPDT
- 参数名
- 「路径」栏仅填写
- 在
filters参数对应的「编码」列,取消勾选(其他参数保持默认勾选状态)。这样JMeter会仅对需要编码的参数处理,filters中的::将保持原样发送。
2. 使用Raw请求构造参数(备选方案)
- 添加「HTTP Header Manager」,设置
Content-Type为application/x-www-form-urlencoded(根据服务器要求调整)。 - 在HTTP请求的「请求体」面板选择「Raw」格式,直接写入完整参数串:
bucket=abc&table=xyz&filters=uuid::12367d-ae0b-44b5-9813-zxzxzx6c00000,anotheruuid::324,date::2022-04-01|2022-04-06,uuid3::1BABFPDT - 注意:部分服务器可能要求GET请求的参数必须放在URL中,此时可结合「HTTP URL Rewriting Modifier」或直接构造URL并禁用全局编码。
3. 禁用全局URL编码(不推荐,仅应急使用)
- 打开JMeter安装目录下
bin/jmeter.properties文件,找到urlencoder.encodeparams=true行,修改为urlencoder.encodeparams=false,重启JMeter。 - 此方法会禁用所有参数的URL编码,可能导致其他含特殊字符的参数出现异常,仅在确认所有参数都无需编码时使用。
内容的提问来源于stack exchange,提问作者gurusharan n
相关产品推荐
相关产品推荐

