我需要使用openssl在shell脚本中执行一些HTTP GET请求。 下面显示了我正在使用的线路。 这是parsing以下格式的XML响应的内容。
<Result>success</Result>
<Result>failure</Result>
echo -e "GET /test HTTP/1.1\r\nHost:$(hostname)\r\n\r\n" | openssl 2>&1 s_client -quiet -connect server-url:443 | grep -o -P --color '(?<=Result\>).*(?=\</Result)'
这工作,并相应地返回string“成功”或“失败”。 我面临的问题是openssl命令在执行GET请求后不会终止,而是坐在那里等待更多的input。 我相信这是由于隐含的-ign_eof防止由-quiet选项引起的自动终止。 我已经尝试使用-no_ign_eof选项,但是这会导致openssl命令在GET请求收到响应之前终止,所以我不能得到响应的内容,如果我使用它。
我怎样才能修改这个命令,所以我可以传递GET请求通过stdin(要求,因为我想把它放在一个循环),但有openssl命令后,每个请求终止?
你真正应该做的是使用一个专门用于获取Web资源的工具,例如curl , wget或libwww-perl的GET命令。 如果没有可用的东西,你应该让你的系统pipe理员安装适当的东西。
随着那个…
openssl命令不终止,因为Web服务器没有closures连接。
请记住,默认情况下,HTTP会在每个请求之后保持连接打开,作为性能优化 一旦一个请求完成,另一个请求可以通过同一个连接发送,而不是closures并重新打开一个新的连接。
如果要指示服务器closures连接,则可以发送Connection: close HTTP标头。