You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JMeter用CSV提取数据发HTTP请求返回400,手动传参正常

解决JMeter请求体末尾换行导致400错误的问题

问题根源

从CSV提取的login_type、username、password变量可能包含换行符或首尾空白字符,当这些变量插入请求体后,最终的JSON会带有多余换行,导致服务器解析失败返回400。

解决方案

1. 在JSR223脚本中清理变量值

修改变量赋值逻辑,通过trim()方法去除字符串首尾的空白(包括换行符、空格、制表符等),同时优化冗余的循环逻辑:

import org.apache.commons.io.IOUtils
import java.nio.charset.StandardCharsets
import groovy.json.JsonOutput
import groovy.json.JsonSlurper

def response = prev.getResponseDataAsString()
// 按换行分割并过滤空行,避免处理CSV末尾无效行
def lines = response.split('\n').findAll { it.trim() != '' }

def userData = []
for (int i = 1; i < lines.length; i++) {
    def line = lines[i].trim()
    def tokens = line.split(',')
    // 对每个字段做首尾空白清理
    userData << [
        login_type: tokens[0].trim(),
        username: tokens[1].trim(),
        password: tokens[2].trim()
    ]
}

def jsonMap = new JsonSlurper().parseText(JsonOutput.toJson(userData))
def threadIndex = Integer.parseInt(vars.get('__threadNum')) - 1
// 直接通过线程号取对应数据,无需多余循环
if (threadIndex < jsonMap.size()) {
    vars.put("login_type", jsonMap[threadIndex].login_type)
    vars.put("username", jsonMap[threadIndex].username)
    vars.put("password", jsonMap[threadIndex].password)
}

2. 在请求体中直接清理变量

如果不想修改脚本,可在请求体里使用JMeter的__trim()函数去除变量首尾空白:

{"login_type":"${__trim(${login_type})}","username":"${__trim(${username})}","password":"${__trim(${password})}"}

3. 确保请求体本身无多余换行

检查HTTP请求的请求体输入框,确保整个JSON是紧凑的单行格式,没有手动添加的换行或空格;如果是从文件读取请求体,需确保文件内容是单行JSON,无末尾换行。

验证方法

运行脚本后,通过JMeter的查看结果树查看第二个请求的“请求体”,确认JSON为单行紧凑格式且无多余换行符,再验证服务器响应是否正常。

内容的提问来源于stack exchange,提问作者coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 18:05:48