我正在从网页上的表单向http服务器发送http发布数据,前2个请求可以正常工作,但是在大多数情况下,当我发送第3个请求时,它没有收到请求 但是在某些情况下,我确实注意到服务器也未在第二个请求上收到请求,但是这种情况发生的频率并不高,在第三个请求上,它导致问题的发生频率更高
发生的情况是,当我发送第一个请求时,它立即接收并处理数据,在第二个请求中它执行相同的操作,但是在第三个请求中它什么也没收到,并且网页继续显示加载标志,然后几秒钟后,网页显示错误消息,表明该网站可以访问,并且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()