十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章主要介绍了shell如何批量curl接口脚本,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
员工经过长期磨合与沉淀,具备了协作精神,得以通过团队的力量开发出优质的产品。创新互联坚持“专注、创新、易用”的产品理念,因为“专注所以专业、创新互联网站所以易用所以简单”。公司专注于为企业提供成都网站设计、成都做网站、微信公众号开发、电商网站开发,小程序开发,软件按需制作等一站式互联网企业服务。最近,刚接一需求,如下:
DBA会将一些服务规则的数据导出,然后一条条手动去curl某应用接口,从而完成相应的业务要求。
那么问题来了,DBA导出的数据是格式化的,要curl的接口也是格式化的,需要的,只是将相应的数据替换成对应的值即可。注意,不保证所有的命令都能执行成功,有可能需要重新跑接口。
很明显,手动一条条地去写curl命令,然后一条条执行,然后观察结果,做出判断,这对于少数几个数据来说,是可行的。但是假设,数据有几百条、几千条几万条呢,那就不可能人工一条条去搞了吧。因此,shell脚本就该出场了(当然了,有同学说,我用其他语言也可以啊,甚至说我这个功能写到代码里就可以了,然而这些特殊无意义的代码,是不需要长期保留下来的)。
该shell脚本只要做好三件事就行了:
1. 读取源数据文件的内容,替换接口的数据格式;
2. 执行命令,完成业务操作;
3. 记录完整的日志,以便后期排查对比;
需求很简单,不懂语法没关系,查一下嘛。参考代码如下:
#!/bin/bash log_file='result.log' param_file=$1 # 源数据在命令行中指定 log_cmd="tee -a $log_file" i=1 for line in `cat $param_file`; do echo "read line" $i ":" $line | tee -a $log_file let "i=$i+1" OLD_IFS=$IFS;IFS=","; arr=($line) # 分割数据到数组 IFS=$OLD_IFS; curl_cmd="curl -d 'uId=${arr[0]}&bid=${arr[1]}&bA=${arr[2]}&to=6&bP=30&fddays=5' http://localhost:8080/mi/api/ss/1.0.1/co/apply" echo `date "+%Y-%m-%d %H:%M:%S"` "start ===>> " $curl_cmd | tee -a $log_file eval "$curl_cmd 2>&1" | tee -a $log_file # 使用 eval 命令,把错误日志和接口返回结果一并带回,到后续console及日志存储 echo `date "+%Y-%m-%d %H:%M:%S"` "end <<===" $curl_cmd | tee -a $log_file done echo `date "+%Y-%m-%d %H:%M:%S"` "over: end of shell" | tee -a $log_file
源数据格式参考如下:
234,201708222394083443,5000 4211,201782937493274932,3000 23,201749379583475934,2000
当读取的文件格式为空格分隔的文件时,该读取将发生异常,换成另一种方式读取行:
#!/bin/bash log_file='result.log' param_file=$1 log_cmd="tee -a $log_file" i=1 while read line; do echo "read line" $i ":" $line | tee -a $log_file let "i=$i+1" arr=($line) curl_cmd="curl -d 'uId=${arr[0]}&bid=${arr[1]}&bt=${arr[2]}&toBorrowType=6&borrowPeriod=30&fddays=5' http://localhost/mi/c/1.0.1/c/n" echo `date "+%Y-%m-%d %H:%M:%S"` "start ===>> " $curl_cmd | tee -a $log_file #`$curl_cmd` 2>&1 $log_file | tee -a $log_file eval "$curl_cmd 2>&1" | tee -a $log_file echo `date "+%Y-%m-%d %H:%M:%S"` "end <<===" $curl_cmd | tee -a $log_file done < $param_file echo `date "+%Y-%m-%d %H:%M:%S"` "over: end of shell" | tee -a $log_file
这里有个技巧,即使用tee命令,既在console上显示了访问日志,也往文件里写入了记录。即有人工观察,也有日志存储,以备查看。
如此,便实现了大家都不用手动敲数据,从而在这上面犯错的可能了。 DBA从数据导出格式化数据,shell脚本直接读取格式化数据,保留记录。这才是程序该干的事。
一句话,想办法偷个懒,这是我们该干的事。
但是应该要注意,当一个接口被脚本跑去执行时,你就行考虑并发问题,以服务器的压问题了,也不要太相信代码。做最坏的打算。
感谢你能够认真阅读完这篇文章,希望小编分享的“shell如何批量curl接口脚本”这篇文章对大家有帮助,同时也希望大家多多支持创新互联网站建设公司,,关注创新互联行业资讯频道,更多相关知识等着你来学习!