PythonでHTTPリクエストを処理する方法

python-http-request-handlingのアイキャッチ画像 Windows

サーバーサイドのPythonで、ブラウザ等のクライアントからHTTPリクエストを受けて処理する方法です。

リクエストURLの取得

クライアントからリクエストされたURLは以下のように取得します。

import os

original_url = os.environ['HTTP_X_ORIGINAL_URL'];

リクエストAPIの取得

クライアントからリクエストされたURLの内、どのようなAPIをリクエストされたかを取得します。
例として、ここでは「http://ip:port/api/functions」というURLがリクエストされるとします。
“api”は共通の識別子、”functions”が実行してほしい各種API機能名とします。

import re

request_api_function = re.search(r'/api/[a-zA-Z0-9\/\-]+', original_url)
request_api_function = request_api_function.group()
request_api_function = request_api_function.replace('/api/', '')  # functionsを抽出

POST/GET/PUT/DELETEのディスパッチ

クライアントからリクエストされたAPIがPOST/GET/PUT/DELETEの内どれなのかを判断し、ディスパッチします。
リクエストデータは、POST/PUT時はJSON形式、GET/DELETE時はクエリストリングで通知され、内部ではいずれも連想配列形式でハンドリングする例を記載します。

import cgi
import json
import sys

request_method = os.environ['REQUEST_METHOD']

if request_method == 'POST':
    content_length = int(os.environ['CONTENT_LENGTH'])
    request_body = sys.stdin.read(content_length)
    request_data = json.loads(request_body)
    # POSTの処理
elif request_method == 'GET':
    request_data = cgi.FieldStorage()
    # GETの処理
elif request_method == 'PUT':
    content_length = int(os.environ['CONTENT_LENGTH'])
    request_body = sys.stdin.read(content_length)
    request_data = json.loads(request_body)
    # PUTの処理
elif request_method == 'DELETE':
    request_data = cgi.FieldStorage()
    # DELETEの処理

TIPS

  • IISとWebサイト・CGIの自動構築についてはこちらをご覧下さい。
  • IISからPythonを実行する方法はこちらをご覧下さい。

コメント

タイトルとURLをコピーしました