如何使用cURL执行多个同时请求?

时间:2012-03-08 21:08:07

标签: curl request

我想使用 cURL 来测试我的服务器上的洪水处理。现在我在Windows命令行上使用它:

curl www.example.com

GET页面一次。我现在想做同样的事情,除了一个请求,我想一次生成至少10个请求。我该怎么做?

6 个答案:

答案 0 :(得分:30)

虽然curl是一种非常有用且灵活的工具,但并不适用于此类用途。还有其他工具可以让您对同一个URL发出多个并发请求。

ab是一种非常简单但有效的此类工具,适用于任何Web服务器(尽管引入的重点是Apache服务器)。

Grinder是一个更复杂的工具,可以让您指定在负载测试中使用的许多不同的URL。这使您可以混合对廉价和昂贵页面的请求,这可能更类似于您网站的标准负载。

答案 1 :(得分:2)

Curl本身可能不会做,但是bash可以。

min-height: 100%

答案 2 :(得分:0)

我有一个类似的案例,最终我写了一个python脚本:

import threading
import requests

def thread_function(url):
    response = requests.get(url)

thread1 = threading.Thread(target=thread_function, args=('http://foo',))
thread2 = threading.Thread(target=thread_function, args=('http://bar',))

thread1.start()
thread2.start()

答案 3 :(得分:0)

7.68.0 开始 curl 可以并行获取多个 url。此示例将从具有 3 个并行连接的 urls.txt 文件中获取网址:

curl --parallel --parallel-immediate --parallel-max 3 --config urls.txt

urls.txt:

url = "example1.com"
url = "example2.com"
url = "example3.com"
url = "example4.com"
url = "example5.com"

答案 4 :(得分:0)

另一种方法是将 GNU Parallel 与 Curl 结合使用。

这是一个简化的示例,总共执行 100 个 curl 请求,一次(同时)10 个:

seq 100 | parallel --max-args 0 --jobs 10 "curl https://www.example.com"

seq 100 生成我们通过管道输入 parallel 的数字列表:

1
2
3
4
5
6
7
8
9
10
... and so on

然后我们使用 --max-args 0 选项,这意味着它将为每个参数执行 1 个作业。不要改变这个数字。同样的别名选项是 -n

文档说:

<块引用>

-n 0 表示读取一个参数,但在命令行中插入 0 个参数。

然后我们使用 --jobs 10 选项,它将并行/并发运行多达 10 个作业。相同的别名选项是 -j--procs/-P

文档说:

<块引用>

每台机器上的作业槽数。最多并行运行 N 个作业。 0 表示尽可能多。默认为 100%,这将在每台机器上的每个 CPU 内核运行一个作业。

下面是一个功能更强大的例子,它打印返回码,隐藏输出,并根据命令是否成功 (&&) 或不成功 (||) 打印一条 SUCCESS 或 FAIL 消息,我觉得这对我的调试很有用:

seq 100 | parallel --max-args 0 --jobs 10 "curl -w '%{http_code}\n' https://www.example.com --output /dev/null --location --silent && printf SUCCESS\n\n || printf FAIL\n\n"

example output of using GNU Parallel to Curl

答案 5 :(得分:0)

for ((i=1;i<=10;i++)); do curl  -I -k "https://www.example.com"; done

这是对我有用的脚本。如果您需要添加更多请求,请将值更改为 10。