我想使用cURL来测试服务器的洪水处理。目前我在Windows命令行中使用以下命令:
curl www.example.com
现在我要做的与之前相同,都是获取页面,但我希望一次生成至少10个请求而不是一个请求,应该如何实现?
start cmd /c curl.bat
多次运行。 - Daniel T.从7.68.0
版本开始,curl可以并行获取多个URL。这个例子将使用3个并行连接从urls.txt
文件中获取URL:
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"
curl -o 1.txt -X GET https://foo & curl -o 2.txt -X GET https://foo
&
连接符将第一个命令放在“后台”,并立即启动第二个命令。但是这种方法不太适用于洪水测试。 - alexis另一种方法是使用Curl和GNU Parallel。
以下是一个简化的示例,总共进行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"
for ((i=1;i<=10;i++)); do curl -I -k "https://www.example.com"; done
这是适用于我的脚本。如果您需要添加更多请求,请更改10的值。
从版本7.66.0
开始,您可以使用-Z, --parallel
执行以下操作:
curl -Z https://example.com -o file1 https://example.com -o file2
我曾经遇到过类似的情况,最终我写了一个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()