Я пытаюсь прослушать сообщение json через порт HTTP. Мне удается получить значения в методе DO_POST, но я не знаю, как использовать его из метода. Я использую python. Я хочу поместить сообщение в очередь, которая будет разделена между несколькими процессами. Я попытался переопределить методы класса BaseHTTPRequestHandler, но он не работает, когда я пытаюсь создать новые атрибуты для класса.
Он работает с глобальной переменной, но я думаю, что это не лучший способ. Он будет работать со всеми файлами в одном и том же файле python, но я хотел бы только импортировать модуль и использовать его в основном файле.
from http.server import HTTPServer, BaseHTTPRequestHandler
import socketserver
import socket, sys, threading, queue
import configparser
from io import BytesIO
import json
def decode_json(strjson):
d = json.loads(strjson)
msg = d.get("msg")
return msg
class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
global salut
print(salut)
self.send_response(200)
self.end_headers()
self.wfile.write(b'Hello, world!')
def do_POST(self):
content_length = int(self.headers['Content-Length'])
body = self.rfile.read(content_length)
self.send_response(200)
self.end_headers()
response = BytesIO()
response.write(b'This is POST request. ')
response.write(b'Received: ')
response.write(body)
msg = decode_json(body.decode("UTF-8"))
if msg:
print(msg) ## GET THIS MESSAGE OUT OF THIS METHOD TO USE IT SOMEWHERE ELSE
print(body.decode("UTF-8"))
self.wfile.write(response.getvalue())
def serve_forever(port,test):
print(test)
socketserver.TCPServer(('', port), SimpleHTTPRequestHandler).serve_forever()
class ServerHTTP(HTTPServer,threading.Thread):
def __init__(self,queue):
self.queue = queue
self.stopped = False
host, port = self.init()
threading.Thread.__init__(self)
HTTPServer.__init__(self,(host, port), SimpleHTTPRequestHandler)
#Read Host and port from an INI file tcpServer.cfg
def init(self):
config = configparser.ConfigParser()
config.read('ServeurHTTP.cfg')
HOST = config.get("CFG","HOST")
PORT = config.getint("CFG","PORT")
return HOST, PORT
def serve_forever(self):
while not self.stopped:
self.handle_request()
def run(self):
self.serve_forever()
if __name__ == "__main__":
q=queue.Queue()
s = ServerHTTP(q)
s.start()