You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

咨询:Windows 10中如何批量运行多组仅name不同的cURL请求(串行/并行)

嘿,我来帮你解决这个批量运行cURL请求的问题!既然你用的是Windows 10下的Git Bash,那咱们可以用几种简单的方式实现串行或者并行运行这近千条请求,完全不用纠结批处理每行被当成独立命令的问题~

串行运行批量cURL请求(一个接一个执行)

串行的好处是不会给服务器造成太大压力,适合对并发有限制的场景。这里有两种实用方法:

方法1:用Bash脚本循环读取name列表

这是Git Bash下最顺手的方式:

  1. 先把所有不同的name值整理到一个文本文件里,比如命名为names.txt,每行放一个name,像这样:
    alice
    bob
    charlie
    ...
    
  2. 创建一个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
    
  3. 在Git Bash里给脚本加执行权限:
    chmod +x run_curls_serial.sh
    
  4. 运行脚本即可:
    ./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

火山引擎 最新活动