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

添加正确Cookie后Gatling仍报403 Forbidden错误,求排查指导

问题分析与解决

最直接的问题:Cookie添加时机错误

你的脚本里,第一个GET /请求是在addCookie动作之前执行的,也就是说这个请求根本没有携带你设置的认证Cookie,自然会返回403 Forbidden。

修正后的代码

把addCookie移到请求之前,确保请求发送时Cookie已经被添加到会话中:

package assignment7;

import static io.gatling.javaapi.core.CoreDsl.*;
import static io.gatling.javaapi.http.HttpDsl.*;

import io.gatling.javaapi.core.*;
import io.gatling.javaapi.http.*;

public class AssignmentSimulation extends Simulation {
    
    // http config
    private HttpProtocolBuilder httpProtocol = http
        .baseUrl("https://staging.com")
        .acceptHeader("application/json, text/plain, */*")
        .acceptEncodingHeader("gzip, deflate, br")
        .acceptLanguageHeader("en-US,en;q=0.9")
        .contentTypeHeader("application/json")
        .userAgentHeader("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.47");
        
    // Scenario definition
    private ScenarioBuilder scn = scenario("Load Testing")
        // 先添加Cookie,再执行请求
        .exec(addCookie(Cookie("stgoauth", "ZW1haWw6ZGFybGFAa2FsaWJyci5jb20gdXNlcjo=")
            .withDomain(".staging.com")
            .withPath("/")
            .withSecure(true)))
        .exec(http("Accessing Website")
            .get("/")
            .check(status().saveAs("status")))
        .exec(session -> {
            int responseStatus = session.getInt("status");
            System.out.println("Response Code: " + responseStatus);
            return session;
        });

    //load simulation
    {
        setUp(
            scn.injectOpen(atOnceUsers(1))
        ).protocols(httpProtocol);
    }
}

其他可能导致403的原因

如果修正时机后仍然报错,检查以下几点:

  • Cookie属性缺失:查看浏览器中实际的认证Cookie,是否带有HttpOnly、SameSite属性。如果有,需要在Gatling的Cookie中补充:
    Cookie("stgoauth", "xxx")
        .withDomain(".staging.com")
        .withPath("/")
        .withSecure(true)
        .withHttpOnly(true) // 补充HttpOnly属性
        .withSameSite(Cookie.SameSite.Lax) // 根据实际情况设置Lax/Strict/None
    
  • Cookie有效性:确认你使用的stgoauth值是否过期,或者是否需要和其他请求参数(比如CSRF Token)配合使用。有些网站会同时校验Cookie和请求头中的Token。
  • 域名/路径匹配:确保Cookie的domain和path与目标网站的完全一致。比如如果网站的Cookie域名是staging.com而不是.staging.com,就需要调整。
  • 请求头完整性:对比浏览器发送的请求头,检查是否遗漏了关键字段(比如Referer、Origin),有些网站会校验这些字段防止跨站请求。

Gatling中Cookie相关的常见陷阱

  • Cookie添加时机:必须在发送请求前添加,否则请求不会携带Cookie。
  • HttpOnly Cookie的限制:如果目标网站的Cookie是HttpOnly,Gatling的addCookie必须显式设置.withHttpOnly(true),否则无法正确模拟浏览器的Cookie行为。
  • 会话隔离:每个虚拟用户的Cookie是独立存储在各自的会话中的,不要尝试在全局设置Cookie(除非所有用户共用同一个Cookie)。
  • 自动Cookie管理:Gatling默认会自动管理响应中的Cookie,如果是通过登录接口获取Cookie,建议让Gatling自动保存,而不是手动添加,避免遗漏属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 06:00:25