“你是如何使用管道的?”;“回声”;变成;openssl;?

“你是如何使用管道的?”;“回声”;变成;openssl;?,openssl,Openssl,我只是尝试将“OPTIONS/HTTP/1.0”请求提交给启用SSL的web服务器;然而,当运行此程序时,我只是在连接结束时“完成” 下面是我正在使用的确切命令: echo -e "OPTIONS / HTTP/1.0\r\n\r\n" | openssl s_client -connect site.com:443 有什么建议吗?我确信我遗漏了一些非常简单的问题。这个问题在这个帖子中讨论过(链接的电子邮件只有一个简单的答案,我将在下面重复): 问题在于,一旦stdin关闭,s_客户端就会关闭

我只是尝试将“OPTIONS/HTTP/1.0”请求提交给启用SSL的web服务器;然而,当运行此程序时,我只是在连接结束时“完成”

下面是我正在使用的确切命令:

echo -e "OPTIONS / HTTP/1.0\r\n\r\n" | openssl s_client -connect site.com:443

有什么建议吗?我确信我遗漏了一些非常简单的问题。

这个问题在这个帖子中讨论过(链接的电子邮件只有一个简单的答案,我将在下面重复):

问题在于,一旦stdin关闭,s_客户端就会关闭。因此,您的代码工作正常,但s_客户端在收到选项后和服务器响应前退出。

延迟回答

似乎如果你在你的子shell中添加一个“猫”,它就会起作用

(echo -ne "GET / HTTP/1.1\r\nHost: google.com\r\n\r\n" ; cat ) | openssl s_client -connect google.com:443

这只“猫”挂在周围,然后您可以继续手动与s_客户端交互。我在这里只做了一个测试,但我需要同样的能力将http headesr/Body从命令行传输到ssl服务器。

有一个
-ign\u eof
选项,它可以完全满足您的需要,而无需任何破解。显然,它自2000年(0.9.5a)以来就一直存在于代码库中


该选项抑制Q和R的特殊解释,并忽略标准输入上的EOF。相反,它会等待连接关闭。

这正是我想要的。我找不到几周前我找到的资源,现在开始。谢谢:)。但不确定如何将您的答案标记为正确:\邮件列表对话来自1999年;这可能就是为什么在下一个版本中添加了更改行为的选项。对我来说,有效的方法是将
-ign\u eof
添加到
openssl s\u client
命令中。(虽然响应应该在不到一秒钟的时间内到达,
sleep
和括号没有起作用。)我想执行openssl s_客户端-connect fiestyduck.com:443,然后在python中使用GET/HTTP/1.1?如何使用sub_进程在单个命令中请求。目前popen=subprocess.popen(((echo'GET/”;sleep 5)| C:\\cygwin64\\bin\\openssl.exe s_client-connect news.ycombinator.com:443),stdin=subprocess.PIPE,universal_newlines=True,stdout=subprocess.PIPE)抛出语法错误这肯定是最好的答案。注意
echo-e“OPTIONS/HTTP/1.0\r\n\r\n\r\n”
在末尾发送第三个换行符。要抑制它,请使用
echo-ne“OPTIONS/HTTP/1.0\r\n\r\n”
。您可以使用
openssl s_客户端-点火-右侧暂停
(echo -ne "GET / HTTP/1.1\r\nHost: google.com\r\n\r\n" ; cat ) | openssl s_client -connect google.com:443