【问题标题】:Sending HTTP requests with binary body using JMeter使用 JMeter 发送带有二进制正文的 HTTP 请求
【发布时间】:2013-11-26 14:26:29
【问题描述】:

我正在尝试使用 JMeter 发送带有二进制内容的 HTTP 请求。 在文档中,我发现我可以发送带有二进制内容的文件。我认为这不是我需要的一个好的解决方案,因为每个请求都有自己的二进制内容。

这是我用 Perl 编写的一个客户端示例,它展示了我试图完成的工作:

$date_time = sprintf "%08X", time();
$BODY_TEMPLATE = "00${date_time}0015";
$body_len = (length (sprintf($BODY_TEMPLATE,0,0))) / 2;
# Here I set $TARGET & $HOST
$MSG_HEADER = "POST \/unil?URL=${TARGET} HTTP\/1.1\r\nHost: ${HOST}\r\ncontent-type:application/binary\r\ncontent-length: ${body_len}\r\n\r\n";
$body = pack ("H*", $BODY_TEMPLATE);
$message_to_send = $MSG_HEADER . $body;
# at this point I sent the entire message over a TCP socket I previously opened.

有什么想法吗? 谢谢, 尤瓦尔

【问题讨论】:

    标签: jmeter


    【解决方案1】:

    可以使用 JMeter。我建议使用

    1. Beanshell Pre-Processor 构造您的请求正文并将其存储到 JMeter 变量中(您不需要计算内容长度,因为 JMeter 足够聪明,可以为您完成)
    2. 使用 Beanshell 预处理器中生成的“正文数据”设置 HTTP 采样器(在正文生成代码的末尾,您需要执行类似 vars.put("mybody",generatedbodystring); 的操作。在您的 HTTP 采样器中,您可以参考 mybody 变量${mybody}${__V(mybody)}
    3. 添加HTTP Header Manager 将Content-Type 设置为“application/binary”

    HTTP 标头管理器和 BeanShell 预处理器必须是您的 HTTP 请求的

    您可以使用调试采样器和查看结果树侦听器来检查请求/响应详细信息和正在发送的数据。

    希望这会有所帮助。

    【讨论】:

    • 谢谢德米特里。我是 Beanhell(和 Java)的新手。我发现通过使用: javax.xml.bind.DatatypeConverter.parseHexBinary(hexadecimalString);我可以转换我的二进制数据以在我的代码中使用它。一旦我把所有东西放在一起,我希望它会起作用。
    • Dmitri,当作者要求二进制数据时,为什么您建议使用“生成的正文字符串”?我现在有同样的问题 - 无法发送二进制 POST 请求,即使我在我的 BeanShell 中执行“vars.putObject("mybody", byteArray)"。然后 HTTP 请求的正文数据中的“${mybody}”,Jemeter 在发送之前隐式执行该数组的“toString()”,我不知道为什么以及如何修复它:(
    • 我尝试了stackoverflow.com/questions/23101904/… 中的代码,但二进制数据在转换为字符串时已损坏。我会使用 HTTP 原始请求采样器,但它不适用于 https。通过使用 vars.put("requestBody", new String(requestBody, "ISO-8859-1"));我至少能够获得要正确显示的 pdf 的一部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    • 2023-04-07
    相关资源
    最近更新 更多