MasaのITC Life

夢は起業家!全てにおいて凡人だけど頑張ることだけはいっちょ前!

プログラミング

【C言語】HTTPリクエストを送って、WebサーバからのHTTPレスポンスを取得してみた

投稿日:2020年1月30日 更新日:



HTTPのリクエストメッセージを

Webサーバに送信して、

返ってきたレスポンスメッセージを

表示させていきます。




今回は試しに

リクエストラインには、

"HEAD / HTTP/1.1"
(メソッド URL HTTPバージョン)

を指定しておくります。




HEADメソッド:

リクエストメッセージの内、

ステータスラインとヘッダのみ取得。




真ん中のはURLを指定します。

/ 」はルートディレクトリです。




最後にHTTPのバージョンを指定します。

HTTP2.0に現状まだ、

対応していない場合もあるので、

HTTP1.1を指定しています。




ソースはこちらです。



リクエストラインを指定する際に

\r\n (CRLF) を足す必要があります。




'\r' は、CR: キャリッジリターン

'\n' は、LF: ラインフィード

と呼ばれています。


16進数だと0x0d0x0aです。




これらは行末表現で、

HTTPプロトコルでは、

これらで終了している必要があります。




したがって、

送信バッファにも受信バッファにも

行末表現が含まれています。




今回のソースは、

基本的なクライアント側の

ネットワークプログラミングと

HTTPの基礎知識があれば、

理解しやすいかと思います。






まずは既存のコマンドで

正確な情報を表示してみましょう。




telnet www.google.com 80


telnetコマンドで、

googleのWebサーバに接続します。



そしてHEAD / HTTP/1.1をタイプ後、

2回エンターキーを押します。

2回のエンターが\r\nに相当します。



これを踏まえて、

ソースを実行してみます。

実行時にwebサーバを指定します。

ポートはソース内で指定済みです。



HTTP/1.1 200 OK

(レスポンスステータスライン)

の左にある、

最初の2バイトが文字化けしました。




HTTPのフォーマットを調べれば、

最初の2バイトが何を意味するのか

判明するかと思います。




上記の点以外は、

コマンドでやったときと、

同じ結果になりました。




ちなみにGETメソッドで

やってみてもコマンドと

同じ結果になりました。




最後まで読んでいただきありがとうございました。


-プログラミング

Copyright© MasaのITC Life , 2023 All Rights Reserved Powered by STINGER.