CGI関連
CGIの最初に入れるおまじない
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<code> #! /usr/bin/python3.6 # -*- coding: utf-8 -*- import io import sys import cgitb cgitb.enable() sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') sys.stderr = sys.stdout print("Content-type: text/html; charset=UTF-8") print("") print('<head><title>タイトル</title></head><body>') : </code> |
環境変数取得
1 2 3 4 |
import os environ=os.environ hostname = environ['HTTP_HOST'] |
フォームの内容を取得
1 2 3 4 5 6 |
import cgi form = cgi.FieldStorage() keys = form.keys() for key in keys: print(f'インプットタグのname={key}、入力値={form[key].value}) |
POSTでフォームを送られてきても、GETでURLのパラメーターで送られてきても同じ処理で取得できる。
ファイルをダウンロードする
JSONファイルの場合
1 2 3 4 5 6 7 8 9 |
def response_param_json(param): sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') sys.stderr = sys.stdout print("Content-Type: application/octet-stream") print("Content-Disposition: attachment; filename=param.json") print("") print(json.dumps(param, indent=4)) |
ファイルをアップロードする
JSONファイルの場合
アップロードするファイルを選択して送信するフォームHTML部分
1 2 3 |
print('<form action="sirius2wp_03cleanup.cgi" method="post" enctype="multipart/form-data">') print('<input type="file" name="filedata" accept="application/json" />') print('<input type="submit" />') |
受けるCGI側(受信データをファイルに書き込み後、JSON形式で返す関数)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
def upload_json(): form = cgi.FieldStorage() fileitem = form["filedata"] if fileitem.file: filedata = fileitem.file.read() jsondata = json.loads(filedata) print(f"<p>Upload file name: {fileitem.filename}</p>") print_param_json(jsondata) with open('./'+fileitem.filename, 'w') as f: # json.dump(jsondata, f, indent=4) f.write(filedata.decode()) return jsondata |