加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 卷曲:不要等待回复

发布时间:2020-12-15 22:51:42 所属栏目:安全 来源:网络整理
导读:参见英文答案 Run shell command and don’t wait for return ????????????????????????????????????2个 我目前有一个shell脚本,它依赖于像这样的curl命令: curl --request POST -u name:pass -H "Content-Type: application/json" --data "{data}" https:/
参见英文答案 > Run shell command and don’t wait for return ????????????????????????????????????2个
我目前有一个shell脚本,它依赖于像这样的curl命令:

curl --request POST -u name:pass -H "Content-Type: application/json"
 --data "{data}" https://url.com --cacert ./my_crt

我不需要命令的响应,并且此命令处于大的for循环中,因此等待响应需要花费大量时间.

那么,在bash中有没有办法做同样的事情,但是没有等待响应?

解决方法

如果您想要快速发出大量请求,并且不关心输出,那么您应该做两件事:

>使用相同的连接执行更多请求.

对于小型请求,通常在1个连接上每个请求10个请求要快得多,而在10个连接上每个请求1个请求.对于Henry’s HTTP post test server,差异为2.5x:

$time for i in {1..10}; do
    curl -F foo=bar https://posttestserver.com/post.php ;
  done
Successfully dumped 1 post variables.
View it at http://www.posttestserver.com/data/2016/06/09/11.44.48536583865
Post body was 0 chars long.
(...)
real    0m2.429s

VS

$time  {
    array=();
    for i in {1..10}; do
      array+=(--next -F foo=bar https://posttestserver.com/post.php ) ; 
    done; 
    curl "${array[@]}";
 }
Successfully dumped 1 post variables.
View it at http://www.posttestserver.com/data/2016/06/09/11.45.461371907842
(...)
real    0m1.079s

>最多并行处理N个连接,以避免对主机或机器进行DoS操作

这里来自GNU并行的sem将并行连接的数量限制为4.这是一个更好的后台和等待版本,因为它将始终确保满容量.

for i in {1..20}
do 
  sem -j 4 curl -F foo=bar https://posttestserver.com/post.php
done
sem --wait

您想要的并行请求数取决于主机的强大程度.一个现实的数字可能是32

结合这两种策略,你应该看到没有DoS自己的大幅加速.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读