咨询:Windows 10中如何批量运行多组仅name不同的cURL请求(串行/并行)
嘿,我来帮你解决这个批量运行cURL请求的问题!既然你用的是Windows 10下的Git Bash,那咱们可以用几种简单的方式实现串行或者并行运行这近千条请求,完全不用纠结批处理每行被当成独立命令的问题~
串行运行批量cURL请求(一个接一个执行)
串行的好处是不会给服务器造成太大压力,适合对并发有限制的场景。这里有两种实用方法:
方法1:用Bash脚本循环读取name列表
这是Git Bash下最顺手的方式:
- 先把所有不同的
name值整理到一个文本文件里,比如命名为names.txt,每行放一个name,像这样:alice bob charlie ... - 创建一个Bash脚本文件,比如
run_curls_serial.sh,内容如下:#!/bin/bash # 循环读取names.txt里的每一行name while IFS= read -r name; do # 替换成你实际的cURL命令,把原来的name参数换成$name # 这里用单引号+双引号的组合来避免JSON转义麻烦 curl -X POST "https://your-api-domain.com/your-endpoint" \ -H "Content-Type: application/json" \ -d '{"name": "'"$name"'"}' # 可选:每次请求后延迟1秒,防止触发服务器限流 sleep 1 done < names.txt - 在Git Bash里给脚本加执行权限:
chmod +x run_curls_serial.sh - 运行脚本即可:
./run_curls_serial.sh
方法2:用Windows批处理脚本(兼容CMD/Git Bash)
如果你更习惯批处理,也可以这么写(注意引号转义):
创建run_curls_serial.bat:
@echo off setlocal enabledelayedexpansion for /f "delims=" %%a in (names.txt) do ( curl -X POST "https://your-api-domain.com/your-endpoint" ^ -H "Content-Type: application/json" ^ -d "{\"name\": \"%%a\"}" timeout /t 1 /nobreak >nul ) endlocal
直接在Git Bash或者CMD里双击运行这个批处理文件就行。
并行运行批量cURL请求(同时执行多个)
如果服务器允许高并发,想加快执行速度,可以用并行方式,但一定要控制并发数,别把服务器打垮了。
方法1:用GNU Parallel(Git Bash自带)
Git Bash一般默认安装了GNU Parallel工具,用它来控制并发超简单:
# -j 10 表示同时运行10个请求,可根据服务器承受能力调整(比如5、20) parallel -j 10 curl -X POST "https://your-api-domain.com/your-endpoint" \ -H "Content-Type: application/json" \ -d '{"name": "{}"}' :::: names.txt
这里的{}会自动替换成names.txt里的每一个name值,非常省心。
方法2:用Bash脚本手动控制并发数
如果不想用Parallel,也可以自己写脚本控制并发:
创建run_curls_parallel.sh:
#!/bin/bash max_concurrent=10 # 最大并发数,按需调整 current_jobs=0 while IFS= read -r name; do # 后台运行cURL请求 curl -X POST "https://your-api-domain.com/your-endpoint" \ -H "Content-Type: application/json" \ -d '{"name": "'"$name"'"}' & current_jobs=$((current_jobs + 1)) # 当达到最大并发数时,等待所有后台进程完成再继续 if [ $current_jobs -ge $max_concurrent ]; then wait current_jobs=0 fi done < names.txt # 等待最后一批未完成的请求结束 wait
同样给脚本加执行权限后运行即可。
注意事项
- 先拿少量name测试:在跑近千条请求前,先在
names.txt里放3-5个值,测试请求是否能正确返回预期响应,避免批量出错。 - 引号转义:JSON里的双引号处理要注意,用
'{"name": "'"$name"'"}'这种写法比转义双引号更不容易出错。 - 服务器限流:如果遇到429之类的限流错误,要么降低并发数,要么增加请求间隔(比如
sleep 2)。
内容的提问来源于stack exchange,提问作者user3190153




