bash – 如何使用openssl从HTTP GET请求中获取结果?

前端之家收集整理的这篇文章主要介绍了bash – 如何使用openssl从HTTP GET请求中获取结果?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要使用openssl在 shell脚本中执行一些HTTP GET请求.我现在用来做这条线的线如下所示.这是解析以下格式的 XML响应的内容.

<结果>成功< /结果>

<结果>失效< /结果>

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)'

这样可以相应地返回字符串’success’或’failure’.我面临的问题是openssl命令在执行GET请求后没有终止,而是在那里等待更多输入.我认为这是由于隐式-ign_eof导致-quiet选项导致的自动终止.我已经尝试使用-no_ign_eof选项,但这会导致openssl命令在GET请求收到响应之前终止,所以如果我使用它,我就无法得到响应的内容.

如何修改此命令以便我可以通过stdin传递GET请求(因为我想把它放在一个循环中),但是在每次请求后openssl命令都会终止?

你真正应该做的是使用一个专门用于获取Web资源的工具,例如curl,wget或libwww-perl的GET命令.如果没有可用的东西,您应该让系统管理员安装适当的东西.

随着那个…

openssl命令未终止,因为Web服务器未关闭连接.

请记住,默认情况下,HTTP会在每个请求后保持连接打开,作为性能优化.一个请求完成后,可以通过同一连接发送另一个请求,而不是关闭并重新打开新连接.

如果要指示服务器关闭连接,可以发送Connection:close HTTP标头.

猜你在找的Bash相关文章