jmeter - Jmeter 的 HeaderManager 在 Linux 上使用 \r\n
问题描述
我正面临以下问题。有人可以建议吗?
我有一个通过原始多部分 POST 进行文件上传仿真的 Jmeter 场景。(不使用 Jmeter 的默认值 ' Use multipart/form-data for POST '。只需自己构建 POST)。
场景在 WIN 上运行良好。但是,当我在 Linux 上运行它时它失败了。我得到的是“无效的多部分有效负载格式”
这是 HTTPS,所以我无法使用 tcpdump 检查有效负载(这可能是可能的,只是不知道如何......)无论如何,我只是用一些不安全的方式更改原始 URL,只是为了查看有效负载。我发现那里很奇怪 - 所有标题都以 \r\n 结尾,而消息使用 \n 作为换行符(这是正确的,因为它是 Linux)。
关于为什么 Jmeter 为所有标题添加 \r\n 是否有一些想法?目前我无法从 Linux 运行这样的请求,因为标题内的边界和正文内的边界似乎彼此不匹配。
尝试使用 HeaderManager 和通过 JSR223 中的 API 添加标题 - 无济于事 尝试从 JMX 中删除所有 ^M - 无济于事 正文形成良好, \n 作为换行符。
ps JMX 本身是在 WIN 上创建的,但这不能导致这种行为(尝试在 JVM 中创建/替换已删除的 ^M. 标头;主体是在 JVM 中构建的,而 JVM 在 Linux 上运行)
解决方案
是什么让您认为应该\n
在 Linux 上看到?根据HTTP 协议规范:
HTTP/1.1 将序列 CR LF 定义为除实体主体之外的所有协议元素的行尾标记(有关宽容的应用程序,请参见附录 19.3)。实体主体内的行尾标记由其关联的媒体类型定义,如 3.7 节所述。
CRLF = CR LF
所以 JMeter 的行为是绝对正确的,并且与真实浏览器的行为一致。
您的问题必须存在于其他地方,您可以使用 Wireshark 解密您的安全流量并比较 JMeter 和真实浏览器发送的请求,识别差异并将 JMeter 配置修改为 100% 匹配浏览器发送的请求。
有关手动创建分段上传请求的示例,请参阅在 JMeter 中测试 REST API 文件上传
推荐阅读
- swift - 如何使用缓存库添加 JSON 数据
- javascript - 如何在 Google 地图中的标记上添加显示 .geojson 属性的悬停框?
- javascript - 在PHP中的按钮上调用JS函数
- java - 如何阅读 Firestore 文档?
- c++ - 在纯 C++ 中实现 Linux 内核的 __is_constexpr (ICE_P) 宏
- python-3.x - 为什么 1/2*2 在 Python 中是 1 而不是 0.25,因为 python 遵循 PEDMAS?
- c++ - 关于“使用命名空间标准”的问题?
- python - 如何使用类中的方法来比较该类的两个对象
- javascript - 猫鼬模式无法读取未定义的属性“密码”
- php - 删除换行符和空格 php