概要
HTTP通信の学習や、WEBサイトの動作確認のため、macOS から Telnet を利用して HTTP サーバーに接続したい場合があります。 ここでは macOS から Telnet で HTTP 通信を行う方法について解説します。
Telnetコマンドのインストール
2017年にリリースされた macOS High Sierra から、macOS 標準で telnet コマンドがインストールされなくなってしまいました。 もし High Sierra 以降を利用している場合は、パッケージ管理ソフトウェア「Homebrew」を利用して telnet コマンドをインストールするのが楽です。
$ brew install telnet
Homebrewの導入方法については、別稿「Mac の開発を便利にするパッケージ管理ソフト Homebrew のインストール手順」を参考にしてください。
ホストへの接続
Telnet の導入が済んだら、さっそく Telnet で接続してホストに接続してみましょう。 基本となる telnet コマンドの書式は次の通りです。
telnet ホスト名 ポート番号
例えば例としてローカルにインストールしたWEBサーバーに接続する場合は、次のようになります。
$ telnet localhost 80
HTTP通信をしてみる
それでは具体的に HTTP 通信をしてみましょう。 telnet コマンドでWEBサーバーに接続すると次のようになります。
$ telnet localhost 80
Trying ::1...
Connected to localhost.
Escape character is '^]'.
この表示に続けてHTTPリクエストを入力します。 ここではローカルホストのインストールしたばかりのWEBサーバー(Apache httpd)に接続し、トップページを GET メソッドで取得する例を示します。 具体的には次のようになります、HTTPリクエストの最後に空行をつくる(改行する)のを忘れないようにしてください。
$ telnet localhost 80
Trying ::1...
Connected to localhost.
Escape character is '^]'.
GET / HTTP/1.1
Host: localhost
HTTP/1.1 200 OK
Date: Sat, 27 Jan 2018 01:03:29 GMT
Server: Apache/2.4.29 (Unix) PHP/7.2.1
Last-Modified: Fri, 19 Jan 2018 06:26:22 GMT
ETag: "2d-5631b28b87f80"
Accept-Ranges: bytes
Content-Length: 45
Content-Type: text/html
<html><body><h1>It works!</h1></body></html>
Connection closed by foreign host.
この例では、コマンドとリクエストヘッダ(Host)を付与したシンプルなHTTPリクエストを送信しています。 結果としてローカルのサーバーが 200 OK のステータスコードとレスポンスヘッダ、そしてレスポンスの本文(HTML)を返却してくれているのがわかりました。
HTTPS通信をする
Telnet は SSL/TLS での通信に対応していないため、HTTPS(443) に対してリクエストを送ることができません。 HTTPS のサイトに接続したい場合は openssl コマンドを利用すると良いでしょう。 次のように openssl コマンドを実行します。
$ openssl s_client -connect ホスト名:443 -crlf
コマンドを実行すると暗号通信のための鍵の情報が表示され、そのあとに Telnet と同様にコマンドを受け付ける状態になりますので、telnet コマンド同様に利用することができます。
おわりに
本稿では macOS から Telnet を利用してHTTP通信を行う方法について解説しました。 HTTPの動きを確かめたいとき、HTTPの学習をしたい場合などにぜひ活用してみてください。