プログラミング

Pythonの標準Webサーバーを使ってCGIを実行してみる!


Warning: count(): Parameter must be an array or an object that implements Countable in /home/c9962019/public_html/mochinoki-labo.com/wp-content/plugins/rich-table-of-content/functions.php on line 490

こんにちは、MSKです。
今回はPythonの標準Webサーバーを使ってcgiを実行してみます。

CGIとは

Common Gateway Interfaceの略で、クライアントの要求に応じてサーバーが外部のプログラムを起動して、その結果をHTTP通信を介してクライアントに送信する仕組みのこと。
要求の度にプログラムを起動するので処理が遅く、最近は使用されなくなってきています。

Pythonの標準Webサーバーを使ってみる

Pythonには標準でWebサーバーライブラリが存在しています。
次のコマンドを打つと、コマンドを実行したディレクトリをドキュメントルートしてローカルのサーバーが立ち上がります。

python -m http.server (port番号)

ためしに、任意の場所にフォルダを作って、次のようなhtmlファイル(例えば、index.htmlとして)を置いてみます。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CGIテスト</title>
</head>
<body>
    <h1>CGIテスト</h1>
</body>
</html>

python -m http.server 8000などでローカルサーバーを立ち上げ、ブラウザでlocalhost:8000にアクセスすると上のHTMLファイルが実行されると思います。

Pythonの標準Webサーバーを使ってCGIを実行する

CGIを実行するには–cgiをつけて実行します。

python -m http.server (port番号) --cgi

ドキュメントルートの下にcgi-binというフォルダを作成し、その中にpythonで作成したcgiファイルを置くと実行することができます。

まずはcgiを呼び出すhtmlファイル側を作ります。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CGIテスト</title>
</head>
<body>
    <h1>CGIテスト</h1>
    <form action="cgi-bin/test.py" method="POST">
        <input type="text" name="message" value="" size="40" />
        <input type="submit" value="送信" name="submit" />
    </form>
</body>
</html>

次に実行するpythonファイルを作成します。
上で書いている通り、cgi-binフォルダの中に作ります。(ここではtest.py)

import urllib.parse

def get_message():
    input_message = input()
    input_message = urllib.parse.unquote(input_message)
    parse_message = urllib.parse.parse_qs(input_message)
    return parse_message["message"][0]


if __name__ == '__main__':
    mess = get_message()
    print("Content-type: text/html; charset=shift-jis")
    print()
    print("<!DOCTYPE html>")
    print('<html  lang="ja">')
    print("<head>")
    print('<meta charset="shift-jis">')
    print("<body>")
    print("<h1>受信したメッセージ</h1>")
    print("<p>"+mess+"</p>")
    print("</body>")
    print("</html>")

index.htmlのテキストフィールドに文字を入れると入力した文字が表示されると思います。

最後に

pythonを使って簡単にCGIを実行してみました。
pythonには標準のWebサーバーのライブラリが備わっていて、それを使うことでpythonで作成したCGIを実行することができました。

以上、「Pythonの標準Webサーバーを使ってCGIを実行してみる!」でした。
最後までご覧いただき、ありがとうございました。

ABOUT ME
MSK
九州在住の組み込み系エンジニアです。 2児の父親でもあります。 数学やプログラミングが趣味です。 最近RustとReact、結び目理論と曲面結び目理論にはまっています。