http.server(旧SimpleHTTPServer)の使い方

http.serverとは

Pythonの標準ライブラリの一つで、簡単なHTTPサーバを立てることができます。
これを用いてサービスを提供するというよりは、検証用途で使うことが多いです。

Python2.xではSimpleHTTPServerでしたが、
Python3.xではhttp.serverに移行しました。

使い方

コマンドライン上で使うことが多いかと思います。

  1. 作業ディレクトリを作成し、移動します。
  2. 作業ディレクトリにソースファイルを配置します。(今回は簡単のため、以下のようなindex.htmlを配置します。)
    1
    2
    3
    4
    5
    6
    7
    <html>
    <head>
    </head>
    <body>
    <p>Hello, World!</p>
    </body>
    </html>
  3. 作業ディレクトリにて下記のコマンドを実行します。
    1
    python3 -m http.server 8000
    Python2.xの場合は、代わりに以下のコマンドを実行してください。
    1
    python -m SimpleHTTPServer 8000
    -mはライブラリをスクリプトと実行するためのオプションです。
    また、8000はポート番号を指定しています。
  4. ブラウザでアドレスにlocalhost:8000と入力します。
  5. Hello, Worldが表示されればOK!

あとは、ソースファイルで実行してみてください。

コマンドラインに以下のように、ログが表示されるのでデバッグがしやすく便利です。

1
2
3
4
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
127.0.0.1 - - [10/Mar/2020 20:49:26] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [10/Mar/2020 20:49:26] code 404, message File not found
127.0.0.1 - - [10/Mar/2020 20:49:26] "GET /favicon.ico HTTP/1.1" 404 -

OSError: [Errno 48] Address already in useの対処

1
python3 -m http.server 8000

と実行した際に

1
OSError: [Errno 48] Address already in use

のようなエラーが出る場合があります。

これは、すでに別のプロセスが利用中のポートを使おうとした際に発生するエラーです。

プロセスIDを調べる

下記のようにして、指定したポートを使用しているプロセスを調べることができます。

1
lsof -i:8000
1
2
3
4
[MYNAME@MBA-3 sandbox]$lsof -i:8000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
Python 35873 MYNAME 4u IPv4 0xaf2bced821389259 0t0 TCP *:irdmi (LISTEN)
Python 35873 MYNAME 7u IPv4 0xaf2bced825313ed9 0t0 TCP localhost:irdmi->localhost:50829 (CLOSE_WAIT)

この場合、プロセスIDは35873となります。

プロセスを終了する

1
kill -9 35873

これで、プロセスを終了できたので、再度コマンドを実行してください。

1
python3 -m http.server 8000

今度は、うまくサーバが立ち上がるはずです。

より複雑なアプリケーションを作るために

実際のアプリケーションは、より複雑なフレームワークで実装するのが一般的です。

有名なフレームワークには、FlaskDjangoがあります。

それぞれ、簡単な記事があるのでよろしければご覧ください。

Flaskの使い方

Djangoの使い方

記事情報

  • 投稿日:2020年3月10日
  • 最終更新日:2020年3月12日