Python http сервер перестает отвечать после 2 запросов - PullRequest
1 голос
/ 20 июня 2020

Я отправляю данные http post на http-сервер из формы на веб-странице, первые 2 запроса работают нормально, но в большинстве случаев, когда я отправляю 3-й запрос, он не получает запрос, однако в некоторых случаях я заметил, что сервер do не получает запрос и на второй запрос, но это происходит не слишком часто, при третьем запросе это вызывает проблему чаще

что происходит, когда я отправляю первый запрос, он мгновенно получает и обрабатывает данные, во втором запросе он делает то же самое, но по третьему запросу он ничего не получает, и веб-страница продолжает показывать знак загрузки, и еще через несколько секунд веб-страница выдает ошибку, что сайт доступен и что 123.12.12.12 слишком долго отвечать

вот код

import os
import kwargs
import args
import csv
from http.server import BaseHTTPRequestHandler, HTTPServer
import logging
import urllib.parse

class S(BaseHTTPRequestHandler):
def _set_response(self):
    self.send_response(200)
    #self.send_header('Content-type', 'text/html')
    #self.end_headers()

def breakRequest(self, str):
    l = []
    x = str.split("&")
    for i in x:
        a = i.split("=")
        l.append(a[1])
    return l[0], l[1], l[2], l[3], l[4]

def do_POST(self):
    content_length = int(self.headers['Content-Length']) 
    post_data = self.rfile.read(content_length) 
    var1,var2,var3,var4,var5 = self.breakRequest(str(post_data.decode('utf-8')))
    s = "\n"   +var1+  "\n"  +var2+  "\n"  +var3+  "\n"  +var4+  "\n"  +var5+  "\n"
    logging.info(s)
    #logging.info("POST request,\nPath: %s\\n%s\n\nBody:\n%s\n",
    str(self.path), str(self.headers), post_data.decode('utf-8')
    #print (urllib.parse.unquote(var5))
    pass


    if (var5 == str("1")):
        with open(r'C:\Users\Administrator\AppData\Received\Files\file1.csv', 'w', newline='') as file:
            writer = csv.writer(file)
            writer.writerow([var1])
            writer.writerow([var2])
            writer.writerow([var3])
            writer.writerow([var4])

            

    self._set_response()
    self.wfile.write("Done {}".format(self.path).encode('utf-8'))        

    if (var5 == str("2")):
        with open(r'C:\Users\Administrator\AppData\Received\Files\file2.csv', 'w', newline='') as file:
            writer = csv.writer(file)
            writer.writerow([var1])
            writer.writerow([var2])
            writer.writerow([var3])
            writer.writerow([var4])

    self._set_response()
    self.wfile.write("Done {}".format(self.path).encode('utf-8'))                

    if (var5 == str("3")):
        with open(r'C:\Users\Administrator\AppData\Received\Files\file3.csv', 'w', newline='') as file:
            writer = csv.writer(file)
            writer.writerow([var1])
            writer.writerow([var2])
            writer.writerow([var3])
            writer.writerow([var4])
    self._set_response()
    self.wfile.write("Done {}".format(self.path).encode('utf-8'))     

def run(server_class=HTTPServer, handler_class=S, port= int(input("enter the serving port"))):
    logging.basicConfig(level=logging.INFO)
    server_address = ('', port)
    httpd = server_class(server_address, handler_class)
    logging.info('Starting httpd...\n')
    try:
        httpd.serve_forever()
    except KeyboardInterrupt:
        pass
    httpd.server_close()
    logging.info('Stopping httpd...\n')

if __name__ == '__main__':
    from sys import argv

    if len(argv) == 2:
        run(port=int(argv[1]))
    else:
        run()
...