我想使用 cURL 来测试我的服务器上的洪水处理。现在我在Windows命令行上使用它:
curl www.example.com
将GET
页面一次。我现在想做同样的事情,除了一个请求,我想一次生成至少10个请求。我该怎么做?
答案 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"
答案 5 :(得分:0)
for ((i=1;i<=10;i++)); do curl -I -k "https://www.example.com"; done
这是对我有用的脚本。如果您需要添加更多请求,请将值更改为 10。