HTTPプロトコルを実装する
最初に言及したように、数多くのプロトコルはTCPを基盤としています。実際にTCPSocketを使って、HTTP通信(と言ってもGETだけですが)を行うプログラムを書いてみましょう。
このプログラムは、$ ruby http.rb http://allabout.co.jp/gm/gc/446050/
と引数にURLを渡して使います。URL文字列のパースに便利なURIライブラリを使用しています。
hostに目的となるサーバ、portには80(httpsの場合443)を渡してTCPSocketをnewし、あとはHTTPの取り決めに従い、GET <パス> HTTP/1.0
と Host: <ホスト>
を送信して最後に\r\n\r\n
を送っています。これでsocketにはサーバからの返信が返ってくるという流れです。実際に流してみましょう。
渡したURLのhtmlが帰ってきているのがわかります。
もちろん実際にRubyでHTTPを扱う場合にTCPSocketを直接使うことはなく、Net::HTTP
か、さらに抽象度が高いレイヤーのライブラリを使用します。
今回の記事はここまでとしますが、Rubyでウェブページを扱う部分はいずれ記事でも取り上げる予定です。