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

使用Playwright发送API请求时请求体未被正确携带导致400错误的排查求助

Playwright发送API请求时请求体未被正确携带导致400错误的排查求助

兄弟,我看了你的代码,大概率是Playwright请求体的处理方式搞错了!给你几个排查方向和修复办法:

  • 别手动序列化JSON请求体:你现在用JSON.stringify(body)把对象转成了字符串,但Playwright的请求方法(比如post)在接收对象类型的body时,会自动帮你完成序列化,同时自动匹配正确的Content-Type。如果传的是字符串,哪怕你手动写了application/json的header,服务器可能还是没法正确解析这个字符串格式的请求体——这就是为啥服务器日志显示请求体缺失。

    直接改成传原始对象就行:

    async createRequest(method: string, endpoint: string, parameters?: object, body?: object) {
      let request = null;
      const browser = await chromium.launch();
      const context = await browser.newContext({});
    
      // 删掉这行手动序列化的代码:let bodyRequest = JSON.stringify(body);
    
      try {
        request = await context.request[method.toLowerCase()](
          endpoint,
          {
            headers:{
              'Content-Type': 'application/json',
            },
            params: this.convertObjectToKeyValue(parameters),
            body: body // 直接传入原始对象
          });
      } catch (error) {
        await browser.close();
        throw new Error('Invalid request: /' + method + ' ' + endpoint + ' \n error message: ' + error);
      }
    
      const responseBody = await request.json();
      await browser.close();
      return responseBody;
    }
    
  • 处理空body的情况:如果调用这个方法时没传body,现在的写法会把undefined传给body参数,可能导致请求结构异常。可以加个判断,只有当body存在时才传递这个参数:

    // 先构建请求选项对象
    const requestOpts = {
      headers: { 'Content-Type': 'application/json' },
      params: this.convertObjectToKeyValue(parameters)
    };
    // 只有body存在时才添加到选项里
    if (body) {
      requestOpts.body = body;
    }
    // 发送请求
    request = await context.request[method.toLowerCase()](endpoint, requestOpts);
    
  • 检查参数转换方法:确认convertObjectToKeyValue这个方法没有搞事情——比如会不会把body里的字段意外弄到params里,或者返回了异常格式的参数,导致请求整体结构出错。

另外,建议你在catch块里加个日志,把实际要发送的请求参数打出来,方便排查:

catch (error) {
  console.log('请求详情:', { method, endpoint, parameters, body });
  await browser.close();
  throw new Error('Invalid request: /' + method + ' ' + endpoint + ' \n error message: ' + error);
}

备注:内容来源于stack exchange,提问作者Marcin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 12:00:32