首页 > 解决方案 > 如何防止 jmeter 请求跟随重定向

问题描述

HTTP Request- Redirect AutomaticallyFollow Redirects下有两个选项。我想在未选中跟随重定向时实现行为

//CASE 1: HttpClient client = HttpClientBuilder.create().build();
//CASE 2: HttpClient client = HttpClientBuilder.create().disableRedirectHandling().build();

HttpGet get = new HttpGet("${request_link}");
HttpResponse response = client.execute(get);
SampleResult.setResponseData(EntityUtils.toByteArray(response.getEntity()));

我正在使用如上例 2 中所示的“disableRedirectHandling”来停止自动重定向。但我得到的是 200 响应代码,而不是预期的 302。

这是我对案例 1 的响应:响应代码:200 响应消息:OK 响应标头:

但我期待以下响应:响应代码:302 响应消息:找到

响应标头:HTTP/1.1 302 发现日期:格林威治标准时间 2021 年 6 月 11 日星期五 00:32:45 内容长度:0 连接:保持活动缓存控制:无缓存,无存储,最大年龄 = 0,必须-revalidate Pragma: no-cache Expires: 0 Location: {redirect location link}

注意: disableRedirectHandling()自动禁用重定向,但我想要实现的是禁用跟随重定向

基本上我想要这个 setRedirectsEnabled(false) 或 setMaxRedirects(0)

我试过这个但没有运气,仍然得到重定向

HttpClient client = HttpClientBuilder.create().setDefaultRequestConfig(RequestConfig.custom().setRedirectsEnabled(true).setMaxRedirects(0).build()).build();

标签: groovyjmeterhttpclient

解决方案


您的 CASE 2 看起来有效,可能是您的request_link变量有问题吗?

根据JSR223 Sampler 文档

JSR223 测试元素具有可以显着提高性能的特性(编译)。要从此功能中受益:

使用脚本文件而不是内联它们。如果此功能在 ScriptEngine 上可用,这将使 JMeter 编译它们并缓存它们。

或使用脚本文本并检查缓存已编译的脚本(如果有可用的属性)。 使用此功能时,请确保您的脚本代码不直接在脚本代码中使用 JMeter 变量或 JMeter 函数调用,因为缓存只会缓存第一个替换。而是使用脚本参数。

因此,请尝试将您HttpGet("${request_link}");的替换为JMeterVariables类实例的HttpGet(vars.get("request_link"));wherevars代表(有关此 JMeter API 快捷方式和其他 JMeter API 快捷方式的更多信息,请参阅您应该与 Groovy 一起使用的前 8 个 JMeter Java 类)


一般来说,不使用 JMeter 的HTTP 请求采样器来构建请求的任何具体原因是什么?它支持cookie、标头、缓存管理器、嵌入式资源、身份验证、与报告的更好集成等。


推荐阅读