为什么在通过管道传输到“openssl”时“echo”可以工作,但“cat”却不能

为什么在通过管道传输到“openssl”时“echo”可以工作,但“cat”却不能

我在看获取原始、未解析的 HTTPS 响应的最直接方法通过 HTTPS 向 url 发出 GET 请求,并接收原始的、未解析的响应。

以下作品:

echo 'GET / HTTP/1.1
Host: google.com

' | openssl s_client -quiet -connect google.com:443 2>/dev/null

但是,我想将请求放入文本文件中并将cat其传递给命令。

所以我创建了raw-http.txt

GET / HTTP/1.0
Host: google.com    

需要明确的是,后面有一个空白Host: google.com

现在当我尝试时:

cat raw-http.txt | openssl s_client -quiet -connect google.com:443 2>/dev/null

它只是冻结很长时间然后响应^X%

为什么echo在这里工作却cat没有。我该怎么办?

答案1

之后有一个空白

应该有两个。

$ echo '"'; cat raw.txt; echo '"'
"
GET / HTTP/1.0
Host: google.com    

"
$ cat raw.txt | openssl s_client -quiet -connect google.com:443 2>/dev/null
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="https://www.google.com/">here</A>.
</BODY></HTML>

至于您的echo示例,它有一个额外的不需要的换行符,因此这将起作用:

echo 'GET / HTTP/1.1
Host: google.com
' | openssl s_client -quiet -connect google.com:443 2>/dev/null

相关内容