curl可用于模仿持久(但空闲)的开放连接

kel*_*yfj 14 curl firewall http

我遇到一些Http客户端连接有问题,返回NoHttpResponseException大约1次.

我的假设是防火墙正在关闭空闲连接(并不罕见).我想用curl模仿这个.

我一直在尝试这样的事情但很可能连接永远不会闲置

curl --keepalive-time 60 --limit-rate 128B $URL $URL $URL $URL $URL $URL $URL $URL $URL $URL $URL $URL $URL $URL
Run Code Online (Sandbox Code Playgroud)

我想要的是类似的东西

curl $URL
sleep 10
curl $URL    
sleep 20
curl $URL 
sleep 30
curl $URL 
Run Code Online (Sandbox Code Playgroud)

每次(使用一些魔法!)Curl重用相同的连接.

是否有任何方法可以使用curl(或wget)来完成此操作,而不必编写程序来执行此操作

Mar*_*ski 15

netcat没有你无法做到的事情.

REQ="GET / HTTP/1.1\nHost: localhost\nAccept: *\n\n"
(echo -ne $REQ; sleep 1; echo -ne $REQ; sleep 2; echo -ne $REQ) | netcat localhost 80
Run Code Online (Sandbox Code Playgroud)

如果需要,将路径更改为与/不同的路径...

  • 这当然是一个非常糟糕的 HTTP 客户端,但如果这对用户来说是足够的级别,那么这是一个很好的方法......我只想补充一点,echo 在 POSIX 中没有任何标志,所以 -ne 需要一个特殊的外壳。使用 'printf' 来独立于 shell! (3认同)
  • 放在子shell中的其他有用的东西是`while sleep 1; echo -ne $REQ; done`(1 秒间隔请求),`head -1 > /dev/null`(等待输入)。此外,如果您想模仿的话,可以将请求设置为 `Connection: Keep-Alive `。 (2认同)

Dan*_*erg 6

不,没有办法既没有卷曲也没有wget这样做.当刀具退出时,它关闭所有连接.

我要说的最好的选择是使用脚本语言,也许是一个libcurl绑定,它允许你以更加编程的方式完成所有卷曲魔术.这样你就可以做一个请求,睡10秒然后再做一个请求然后它将重新使用相同的连接 - 尽可能.

libcurl绑定可用于您选择的几乎任何编程语言,即使不使用libcurl,您也可以实现此功能,尽管可能不是同样容易.