導入所需的庫
from http.server import HTTPServer, BaseHTTPRequestHandler import json import socket import cgi from cgi import parse_header, parse_multipart import urllib.request import io,shutil import re
創建Request類處理HTTP請求
class Resquest(BaseHTTPRequestHandler): def handler(self): print("data:", self.rfile.readline().decode()) self.wfile.write(self.rfile.readline()) def do_GET(self): # 處理get請求 print(self.requestline) if self.path != '/hello': self.send_error(404, "Page not Found!") return data = { 'result_code': '1', 'result_desc': 'Success', 'timestamp': '', 'data': {'message_id': '25d55ad283aa400af464c76d713c07ad'} } self.send_response(200) self.send_header('Content-type', 'application/json') self.end_headers() self.wfile.write(json.dumps(data).encode()) def do_POST(self): # 處理post請求 length = int(self.headers['content-length']) req_data = self.rfile.read(length) # 讀取所有http請求報文 print(self.headers) # 請求頭信息 print(self.command) # 請求方式 # 使用re解析出http請求中的圖片,圖片為字節類型 # 圖片數據需要去除httpserver加進去的form-data的邊界線和文件的描述信息 # 本例使用re去除boundary和文件描述的key:value pattern1 = re.compile(b"-+\w*\s{2}(.*?\s{2}){2}\s{2}") pattern2 = re.compile(b"\s{2}-+.+\s{2}") res1 = re.match(pattern1, req_data) res2 = re.search(pattern2, req_data) file_data = req_data[res1.end():res2.start()] # 將解析出的文件字節, 保存到本地 with open("xx.jpg", "wb") as w: w.write(file_data) data = { 'result_code': '2', 'result_desc': 'Success', 'timestamp': '', 'data': {'message_id': '25d55ad283aa400af464c76d713c07ad'} } # 返回響應報文 self.send_response(200) # 響應行 self.send_header('Content-type', 'application/json') # 響應頭 self.end_headers() # 空行 self.wfile.write(json.dumps(data).encode('utf-8')) # 響應體
啟動服務端
if __name__ == '__main__': host = ('127.0.0.1', 9002) server = HTTPServer(host, Resquest) print("Starting server, listen at: %s:%s" % host) server.serve_forever()
使用postman往服務器發圖片
后台成功接收, 並保存圖片