"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

관련 정보