Najprostszy sposób na uzyskanie surowej, niezanalizowanej odpowiedzi HTTPS

39

Jaki byłby najprostszy sposób na wysłanie żądania GET do adresu URL przez HTTPS i uzyskanie surowej, nieprzetworzonej odpowiedzi?

Czy można to osiągnąć dzięki zwijaniu? Jeśli tak, jakich opcji należy użyć?

Żołądź
źródło

Odpowiedzi:

51

Jeśli chcesz użyć curl, powinno to działać:

curl -D - https://www.google.com/

Zauważ jednak, że nie jest to surowa odpowiedź. Na przykład kodowanie przesyłania fragmentarycznego nie będzie widoczne w odpowiedzi. Zastosowanie --rawrozwiązuje to, -vprzydatny jest również tryb pełnych ( ) i -ipokazuje nagłówki przed treścią odpowiedzi:

curl -iv --raw https://www.google.com/

Jeśli chcesz użyć pagera o mniejszym wyniku, konieczne jest również wyłączenie paska postępu ( -s):

curl -ivs --raw https://www.google.com/ | less

W zależności od tego, co chcesz zrobić, może to stanowić problem.

Otrzymujesz wszystkie nagłówki odpowiedzi HTTP i dokument pod żądanym adresem URL.

Mika Fischer
źródło
13

Oto prosty sposób, który przychodzi mi na myśl

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

' | openssl s_client -quiet -connect google.com:443 2>/dev/null
Patrick
źródło
zwróć uwagę, że niektóre serwery (np. github.com) działają tylko zHTTP/1.0
Stevenem Penny
4

Nie jest curl, ale powinien być dostępny na prawie wszystkich Uniksach:

wget -S --spider https://encrypted.site

Jeśli przeszkadzają ci komunikaty o stanie:

wget -S --spider https://encrypted.site 2>&1 | awk '/^  /'

Jeśli chcesz zakończenia linii CRLF:

wget -S --spider https://encrypted.site 2>&1 | awk '/^  / { sub(/$/,"\r"); print }'
Chris Down
źródło
Czy wiesz, czy to zachowałoby \r\npostacie w odpowiedzi?
Acorn,
@Acorn - Po pierwsze, nie wszystkie serwery będą odpowiadały \r\nzakończeniem linii. Nie wierzę, że to i tak go zachowa, ale jeśli to ma dla ciebie znaczenie, dodam sposób na uzyskanie tego wyniku w odpowiedzi.
Chris Down,
1
$ GET -e https://www.google.com

W dystrybucji Debian / Ubuntu należy do pakietu lwp-request.

funollet
źródło