模拟大批量发送http请求至某接口——图文实例(使用Shell脚本方式)
需求
现在有一个需求是:向某网站的某接口发送100万条post请求,请求体共有100万条,按行存放在下图的100wDatas.txt,通过shell脚本模拟curl来不停地请求该接口。

分析:该脚本由上图三个文件构成:
1、sendingPOST.sh:
tokenUrl:下面的例子是先用get拿到token,然后把拿到的token作为post的参数拼接在post请求里面。我调用的网站需要token作为post请求参数的一部分,如果你们的网站不需要token可以无视tokenUrl这部分。
#!/bin/bash
fileName="100wDatas.txt" #读100w条数据
eventUrl="https://xxx.xxx" #这里改成想要调用网站的接口
tokenUrl="https://xxx/gettoken" #我调用的网站需要token作为post请求参数的一部分,如果你们的网站不需要token可以去掉该行
echo -E "-----------------begin send------------------"
function sendEvent() {
count=1;
step=1
for productId in `cat $fileName`
do
params="token=${token}&id=${productId}"
#echo "send event params is :${params}"
curl -d ${params} -X POST ${eventUrl}
echo -E ""
echo -E "-----------------------productId is ${productId},has send $count ---------------" >>"sendingLog.log" #将日志输入到sendingLog.log
count=$(($count+$step))
done
}
head -n 1 $fileName|while read productId
do
echo "the token url is ${tokenUrl}${productId}"
result=$(curl -X GET ${tokenUrl}${productId})
echo " request url is $result"
token=$( echo ${result:1-39:36} )
echo "token is ${token}"
sendEvent #调用上面的发post请求方法
echo -E "------------------ send complete -----------------------"
done
该脚本的功能是:疯狂的调用某一个接口(使用curl来调用,POST请求)
一共调用100万次的脚本都从这完成,脚本会顺序读取100wDatas.txt这个文件的第一行,然后进行参数拼接,拼接完成curl里面的POST参数,动态调用100万次接口
2、100wDatas.txt
这个txt文件按行存放共100W条数据,供shell脚本调用。
注意:这个文件可能会有换行符,如下图所示:

如果我们直接使用vim来看这个文件,看不出来该特殊字符。但是该特殊字符的确存在。
如何看到该特殊字符呢?很简单:vim -b yourFile只需使用-b命令即可
如果我们想按行读取,取到这个换行符就会有问题。所以必须想办法清除该换行符:
方法也很简单:使用vi打开该文件:
切换到命令行模式输入命令::set fileformat=unix

最后wq保存退出该文件
重新 vim -b 该文件,发现换行符没了:

3、sendingLog.log
该文件负责输出调用次数(调用结果),会在sendingPOST.sh目录下生成,如果你执行该shell脚本,该日志文件就会自动生成,下图是执行 tail -f sendingLog.log 的结果:

执行该脚本方法
后台执行:
输入命令 ./sendingPOST.sh &
然后按下 ctrl+c 或者 ctrl+z 压入后台
最后输入exit正常退出终端,不能强行退出终端
重新登录终端,输入命令:ps aux | grep sendingPOST,即可看到后台正在运行的shell脚本进程。
使用这种方法,可以开多个脚本,批量发送100万条POST请求,用多线程的方式发送。(之所以我没这么干是因为怕服务器受不了这么多请求)
更多推荐
所有评论(0)