本周任务:完成http 服务器设计,可以实现api的远程调用
采取这种解决方案的原因:每次调用模型,需要使用重新解释模型,需要耗费较多的时间,因此采用这种方式,让模型一直加载在后台,仿照网站系统,通过get()和post()函数来传递参数。
选择python的原因是,我们都是使用python语言来构建模型。
首先,在本机上进行测试,选用端口号8080
HTTP响应的结构类似于请求:
HTTP method:HTTP请求方法。最常用的就是 GET(抓取数据)与POST(更新数据或者上传文件)
URL:通常是客户端请求的文件的路径,比如 /research/experiments.html, 但是是否响应文件都是由服务器决定的。
HTTP version:HTTP版本。通常是 HTTP/1.0 或 HTTP/1.1
header field:HTTP头内的键值对,做一些基本设置,就像下面这样。
客户端接受的数据类型
Accept: text/html
from http.server import HTTPServer, CGIHTTPRequestHandler,BaseHTTPRequestHandler
import urllib
port = 8080
httpd = HTTPServer(('', port), testHTTPServer_RequestHandler)
print("Starting simple_httpd on port: " + str(httpd.server_port))
httpd.serve_forever()
具体获取参数的get()函数,需要在 testHTTPServer_RequestHandler类中:
class testHTTPServer_RequestHandler(BaseHTTPRequestHandler):
# GET
def do_GET(self):
if '?' in self.path:# 如果带有参数
self.queryString = urllib.parse.unquote(self.path.split('?',1)[1])
# name=str(bytes(params['name'][0],'GBK'),'utf-8')
params = urllib.parse.parse_qs(self.queryString)
print(params)
name = params["name"][0]if "name" in paramselse None
# Send response status code
self.send_response(200)
# Send headers
self.send_header('Content-type','text/html')
self.end_headers()
self.wfile.write(bytes("
hi!
","utf8"))# Send message back to client
#message = "Hello world!"
# Write content as utf-8 data
#self.wfile.write(bytes(message, "utf8"))
return
通过,传递来的url来获取需求参数信息,并且返回输入结果到客户端。