「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

後ろにスペースがあります。

2つあるはずです。

$ 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

おすすめ記事