macOSからTelnetでHTTP通信する方法

投稿者 : OSCA

[PR] "東野・岡村の旅猿"で登場したロケ地を紹介するファンサイト「あの場所へ行こう!」はこちら。

概要

 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の学習をしたい場合などにぜひ活用してみてください。

HTTPのトップへ戻る

著者 : OSCA

OSCA

Java, PHP 系のWEBエンジニア。 WEBエンジニア向けコミュニティ「WEBエンジニア勉強会」を主催。 個人として何か一つでも世の中の多くの人に使ってもらえるものを作ろうと日々奮闘中。
@engineer_osca