我需要调查服务器上的超时问题,并且需要发出大型 HTTP post 请求。 是否有一些简单的方法可以使用curl 创建大型HTTP post 请求,或者是否有一些更好的工具。
curl -X POST -d {10mb random string} localhost:8080/test
创建10M的文件
dd if=/dev/urandom of=output.dat bs=1M count=10
然后使用 Curl 发送文件
curl -X POST -d @output.dat localhost:8080/test
这是您要找的吗?
来自手册页:
-d,--数据
(HTTP) 将 POST 请求中的指定数据发送到 HTTP 服务器, 与用户填写 HTML 时浏览器的操作方式相同 表单并按提交按钮。这将导致卷曲通过 使用内容类型将数据发送到服务器 应用程序/x-www-form-urlencoded。与 -F, --form 比较。
--data-raw 几乎相同,但没有对 @ 字符进行特殊解释。要发布纯二进制数据,您 应该使用 --data-binary 选项。对值进行 URL 编码 您可以使用 --data-urlencode 的表单字段。
如果在同一命令上多次使用这些选项中的任何一个 行,指定的数据块将与一个合并在一起 分隔&-符号。因此,使用 '-d name=daniel -d Skill=lousy' 会 生成一个看起来像“name=daniel&skill=lousy”的帖子块。
如果数据以字母@开头,其余的应该是一个文件 从中读取数据的名称,或者 - 如果您希望curl读取数据 来自标准输入。也可以指定多个文件。从 a 发布数据 因此,名为“foobar”的文件将使用 -d, --data @foobar 来完成。什么时候 --data 被告知从这样的文件中读取,回车符和换行符将被删除。如果您不希望@字符 有特殊的解释,请使用 --data-raw 代替。
另请参阅--data-binary 和--data-urlencode 和--data-raw。这 选项覆盖 -F、--form 和 -I、--head 和 --upload。
以下是创建 ASCII 测试随机文件的方法:
base64 /dev/urandom | head -c 5000 > output.txt
这将创建一个 5000 字节的文件。
然后像其他答案一样传递它:
curl -X POST -d @output.txt localhost:8080/test
这是一个通过 cURL 发送 10 MiB 随机数据的单行代码。
curl -T <(dd if=/dev/urandom bs=1M count=10) http://localhost
它使用<() construction in bash to generate temporary filename that is picked up by curl, also it uses -T instead of -d to avoid "out of memory" error.