首页 > 解决方案 > 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 作为换行符。

TCP 转储

JMX 中的标头管理器

ps JMX 本身是在 WIN 上创建的,但这不能导致这种行为(尝试在 JVM 中创建/替换已删除的 ^M. 标头;主体是在 JVM 中构建的,而 JVM 在 Linux 上运行)

标签: jmeternewlinemultipartform-data

解决方案


是什么让您认为应该\n在 Linux 上看到?根据HTTP 协议规范

HTTP/1.1 将序列 CR LF 定义为除实体主体之外的所有协议元素的行尾标记(有关宽容的应用程序,请参见附录 19.3)。实体主体内的行尾标记由其关联的媒体类型定义,如 3.7 节所述。

  CRLF           = CR LF

所以 JMeter 的行为是绝对正确的,并且与真实浏览器的行为一致。

JMeter 与真正的浏览器

您的问题必须存在于其他地方,您可以使用 Wireshark 解密您的安全流量并比较 JMeter 和真实浏览器发送的请求,识别差异并将 JMeter 配置修改为 100% 匹配浏览器发送的请求。

有关手动创建分段上传请求的示例,请参阅在 JMeter 中测试 REST API 文件上传


推荐阅读