httpserver 简单案例
- http server 端
from http.server import HTTPServer, BaseHTTPRequestHandler
from io import BytesIO
import logging
import base64
from urllib.parse import unquote
logging.basicConfig(level=logging.INFO, format='%(asctime)s | %(name)s [ %(levelname)s ] %(funcName)s | %(lineno)d | %(message)s ')
logger = logging.getLogger(__name__)
class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.end_headers()
self.wfile.write(b'Hello, world!')
def do_POST(self):
content_length = int(self.headers['Content-Length'])
print(content_length)
body = self.rfile.read(content_length)
try:
# result = json.loads(body, encoding='utf-8')
# print(body.decode('utf-8'))
x_data = unquote(body.decode('utf-8'))
wavData = x_data[23:]
print(wavData)
y_data = base64.b64decode(wavData.encode('utf-8'))
print(y_data)
with open('./myASRTFile/A4_48.wav', 'wb') as f:
f.write(y_data)
self.send_response(200)
self.end_headers()
response = BytesIO()
response.write(b'This is POST request. ')
response.write(b'Received: ')
response.write(body[:23])
self.wfile.write(response.getvalue())
except Exception as exc:
self.wfile.write('Request has failed to process. Error: %s' % exc.args[0])
logger.error(exc)
if __name__ == '__main__':
host = ('localhost', 8000)
httpd = HTTPServer(host, SimpleHTTPRequestHandler)
print("Starting server, listen at: %s:%s" % host)
httpd.serve_forever()
接收post请求,并解析请求body ,使用urllib.parse里的unquote方法可以把被编码过的url里的内容解码还原。
把解析到的内容从字符串解析成二进制流写入文件
- http client
import base64
import requests
URL = 'http://127.0.0.1:8000/'
TOKEN = 'xxxxxxxxASRT'
with open('./A4_48.wav', 'rb') as f:
x_data = f.read()
# print(x_data)
# print('=' * 90)
y_data = base64.b64encode(x_data).decode('utf-8')
# print(y_data)
# print('=' * 90)
# print(base64.b64decode(y_data.encode('utf-8')))
# print(base64.b64decode(y_data) == x_data)
datas = {'token': TOKEN, 'wavs': y_data}
res = requests.post(url=URL, data=datas)
print(res.text)
把.wav文件以二进制流读取并处理成字符串使用post上传,达到上传文件的目的。
“”" 一个http简单的demo,新手或者没接触过的看一下就行了,不足之处烦请指出。我也是新手 “”"