python3.6写一个http接口服务,给别人调用1

2022-08-31 21:27:17 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

一、python3.6写一个http接口服务,给别人调用1

首先推荐tornado,Tornado是一个Python web框架和异步网络库,最初在FriendFeed开发。通过使用无阻塞网络I/O,Tornado可以扩展到数万个开放连接,使其成为长轮询、WebSocket和其他需要与每个用户建立长时间连接的应用程序的理想选择。简易而且本地win10能够跑起来。

二、Tornado的get接口代码实现

1. pip install tornado

2. 代码调用:

代码语言:javascript复制
import tornado.ioloop
import tornado.web
import json


class MainHandler(tornado.web.RequestHandler):
    def get(self):
        """get请求"""
        a = self.get_argument('a')
        b = self.get_argument('b')
        c = int(a)   int(b)
        self.write("c="   str(c))

    def post(self):
        '''post请求'''
        body = self.request.body
        body_decode = body.decode()
        body_json = json.loads(body_decode)
        a = body_json.get("a")
        b = body_json.get("b")
        c = int(a)   int(b)
        self.write("c="   str(c))

application = tornado.web.Application([(r"/add", MainHandler), ])

if __name__ == "__main__":
    application.listen(8868)
    tornado.ioloop.IOLoop.instance().start()

3. GET接口访问:http://127.0.0.1:8868/add?a=1&b=2

浏览器请求结果:

4. POST接口请求 http://127.0.0.1:8868/add

也可以使用Django或者Tornado

三、调用一个函数的

代码语言:javascript复制
# -*- coding:utf-8 -*-
# -*- created by: mo -*-

from concurrent.futures import ThreadPoolExecutor
from tornado.concurrent import run_on_executor
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
import tornado.gen
import json
import traceback

def add(a,b):
    c = int(a)   int(b)
    return str(c)


class MainHandler(tornado.web.RequestHandler):
    executor = ThreadPoolExecutor(32)
    @tornado.gen.coroutine
    def get(self):
        '''get接口'''
        htmlStr = '''
                    <!DOCTYPE HTML><html>
                    <meta charset="utf-8">
                    <head><title>Get page</title></head>
                    <body>
                    <form		action="/post"	method="post" >
                    a:<br>
                    <input type="text"      name ="a"     /><br>
                    b:<br>
                    <input type="text"      name ="b"     /><br>
                    
                    <input type="submit"	value="add"	/>
                    </form></body> </html>
                '''
        self.write(htmlStr)

    @tornado.web.asynchronous
    @tornado.gen.coroutine
    def post(self):
        '''post接口, 获取参数'''
        a = self.get_argument("a", None)
        b = self.get_argument("b", None)
        yield self.coreOperation(a, b)

    @run_on_executor
    def coreOperation(self, a, b):
        '''主函数'''
        try:
            if  a != '' and b != '':
                result = add(a, b)  #可调用其他接口
                if result:
                    result = json.dumps({'code': 200, 'result': result, })
                else:
                    result = json.dumps({'code': 210, 'result': 'no result',})

            else:
                result = json.dumps({'code': 211, 'result': 'wrong input a or b', })
            self.write(result)
        except Exception:
            print ('traceback.format_exc():n%s' % traceback.format_exc())
            result = json.dumps({'code': 503,'result': str(a) ' ' str(b)})
            self.write(result)


if __name__ == "__main__":

    tornado.options.parse_command_line()
    app = tornado.web.Application(handlers=[(r'/post', MainHandler)], autoreload=False, debug=False)
    http_server = tornado.httpserver.HTTPServer(app)
    http_server.listen(8832)
    tornado.ioloop.IOLoop.instance().start()

结果为:

1.

2.

.

找了好多东西,都不靠普

老版本的: 用Python编写一个简单的Http Server – 丁培飞 – 博客园

这个不错,但还是不行:python 搭建简单的http server,可直接post文件_Ghost-CSDN博客_httpserver post python

看到这里,原来改版了:http.server — HTTP servers — Python 3.10.2 documentation

不过把BaseHTTPServer、CGIHTTPServer等,在便3.4.2后都集成到http.server里边去了

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/142173.html原文链接:https://javaforall.cn

0 人点赞