PythonでJSONを受けてJSONを返す

pythonは標準でhttpサーバーが入っているということで、触ってみた。

必要なソフトウェア

インストール、設定方法は割愛。

curlはHTTPリクエスト送信用。

送信するJSON

{"user" : "test", "type" : "test", "params" : {"id" : 1234, "data" : 5}}

ソース(jsonResponseServer.py)

import sys
import json
import random
from http.server import BaseHTTPRequestHandler, HTTPServer

class JsonResponseHandler(BaseHTTPRequestHandler):

        def do_POST(self):
                content_len = int(self.headers.get('content-length'))
                requestBody = self.rfile.read(content_len).decode('UTF-8')
                print('JSON=' + requestBody)
#               requestBody = '{"user" : "test", "params" : {"id" : 123, "data" : 5}}'
                jsonData = json.loads(requestBody)
                user = jsonData['user']
                id = jsonData['params']['id']
                data = jsonData['params']['data']
                print('user=' + user)
                print('id=' + str(id))
                print('data=' + str(data))
                self.send_response(200)
                self.send_header('Content-type', 'text/json')
                self.end_headers()

                responseValue = random.random() * 10
                responseData = json.dumps({'data': responseValue})
                self.wfile.write(responseData.encode('UTF-8'))

server = HTTPServer(('', 8000), JsonResponseHandler)
server.serve_forever()

以下のコマンドで実行。

python3 jsonResponseServer.py

リクエスト送信

curlで以下のようにしてリクエストを送信する。
windows版のため、「"」の前に「\」を入れている。
2行目のレスポンスが返ってくる。

curl -H "Content-type: application/json" -X POST -d "{\"user\" : \"test\", \"type\" : \"test\", \"params\" : {\"id\" : 1234, \"data\" : 5}}" http://192.168.0.10:8000/
{"data": 6.010660103182533}