2.index.htmlを送る

更新日: 2026.02.20

super().do_GET()

前回の、”hello.py”を以下の様に書き換え”hello_01.py”とします。

from http.server import HTTPServer, SimpleHTTPRequestHandler class MyHandler(SimpleHTTPRequestHandler): def do_GET(self): super().do_GET() host = '' port = 8080 httpd = HTTPServer((host, port), MyHandler) print('serving at port', port) httpd.serve_forever()

def do_GET(self):の下を super().do_GET() に置き換えたコードです。

また、"index.html"として下記のファイルを作製。

<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <title>http-server 1.0</title> </head> <body> <center> <h1>Hello HTTP!</div> </center> </body> </html>

内容は前回同様画面に大きく”Hello HTTP!"と表示するコードです。 2つのファイルを同じフォルダに保存し、”hello_01.py”を実行。その後PCの ブラウザからサーバにアクセスして下さい。前回同様”Hello HTTP!"と表示されます。

Get request result screen using index.html

このコードは super().do_GET()のindex.html自動認識機能(サーバのルートにindex.htmlが有れば それを優先的に表示)を使っています。 また、super().do_GET()は ”index.html"内でリンクされたファイルも同様に処理します。 例えば下記の様なCSS("hello.css")ファイルを作り

@charset "UTF-8"; .t_font { font-size: 64px; font-weight:bold; font-style: italic; color: #ff0000; }

index.htmlと同じフォルダに保存。index.htmlを"hello.css"を読み込む様に修正

<<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <link rel="stylesheet" href="./hello.css"> <title>http-server 1.0</title> </head> <body> <center> <h1>Hello HTTP!</div> </center> </body> </html>

”hello_01.py”を実行しブラウザでアクセスすると

Control Panel

の様にちゃんとCSSファイルも読み込まれている事が分かります。

super().do_GET()を使わない場合

便利なsuper().do_GET()関数ですが、もちろんこの関数を使わなくても”index.html"は送れます。 下記はそのコード。

from http.server import HTTPServer, SimpleHTTPRequestHandler class MyHandler(SimpleHTTPRequestHandler): def do_GET(self): self.send_response(200) self.send_header('Content-type', "text/html") self.end_headers() f = open("index.html",'rb') self.wfile.write(f.read()) f.close() host = '' port = 8080 httpd = HTTPServer((host, port), MyHandler) print('serving at port', port) httpd.serve_forever()

前回の、”hello.py"の真ん中辺に3行追加しています。

  • open(file_name,mode):ファイルをオープンする。
    • file_name: パスを伴ったオープンするファイルのファイル名
    • mode:  ファイルのモード
    •  文字 意味
       r 読み込み用 (デフォルト)
       w 書き込み用。同名のファイルが有る場合上書きされる。
       x 新規ファイルの書き込み用に開くが既に同名のファイルが有る場合、エラーを返す
       a 書き込み用。ファイルが存在する場合は末尾に追記。
       b バイナリモード
       t テキストモード
  • self.wfile.write():クライアントにデータを送信する関数
    • データがバッファを経てクライアントへ送られます。
    • バイナリモードで動作するため、必ず bytes型(バイナリ) に変換して渡す必要あり。
  • read():  オープンされたファイルからデータを読み出す。
  • close():  ファイルのクローズ
  • これで内部リンクを持たない ”index.html" は問題無く動作するのですが、 ”index.html"が内部リンクを持つ場合はこのコードでは動きません。 追加でリンクファイルに対する処理が必要になります。

次回は

index.htmlがファイルのリンクを持つコードの場合、クライアントから GETリクエストが有った場合の対応について説明します。

SINCE 2026