美文网首页
python 搭建mock server

python 搭建mock server

作者: mysimplebook | 来源:发表于2020-06-14 11:17 被阅读0次

        除了上节介绍使用postman模拟出一个接口外。还可以使用python自带的wsgiref模块(中文意思是WSGI 参考模块)。

           WSGI是专门为Python语言制定的web服务器与应用程序之间的网关接口规范,通俗的来说,只要一个服务器拥有一个实现了WSGI标准规范的模块(例如apache的mod_wsgi模块),那么任意的实现了WSGI规范的应用程序都能与它进行交互。

        实际上WSGI将Web服务分成两个部分:服务器和应用程序。WGSI服务器只负责与网络相关的两件事:接收浏览器的HTTP请求、向浏览器发送HTTP应答;而对HTTP请求的具体处理逻辑,则通过调用WSGI App(应用程序)进行。WSGI工作流程如下图所示:【来源自网络】

        下面具体看看各部分的作用

    WSGI App

        所有的 Python Web框架都要遵循 WSGI 协议,WSGI 中有一个非常重要的概念:每个Python Web应用都是一个可调用(callable)的对象。它规定了一个 application(environ, start_response) 的接口,server会调用 application,并传给它两个参数:environ 包含了请求的所有信息,start_response 是 application 处理完之后需要调用的函数,参数是状态码、响应头部还有错误信息。

        如下一个简单的应用接口

    def application(environ, start_response):

       start_response('200 OK', [('Content-Type', 'text/html')])

    return '<h1>Hello, web!</h1>'

    上面的application()函数就是符合WSGI标准的一个HTTP处理函数,它接收两个参数:

    •   environ:一个包含所有HTTP请求信息的dict对象;

    •   start_response:一个发送HTTP响应的函数。

            有了WSGI,我们关心的就是如何从environ这个dict对象拿到HTTP请求信息,然后构造HTML,通过start_response()发送Header,最后返回Body。整个application()函数本身没有涉及到任何解析HTTP的部分,也就是说,底层代码不需要我们自己编写,我们只负责在更高层次上考虑如何响应请求就可以了。

    WSGI Server

        上节已定义了WSGI App,那么这个application()函数怎么调用?

        application()函数必须由WSGI服务器来调用。有很多符合WSGI规范的服务器,我们可以挑选一个来用。Python内置了一个WSGI服务器,这个模块叫wsgiref。

    wsgi server可以理解为一个符合wsgi规范的web server,接收request请求,封装一系列环境变量,按照wsgi规范调用注册的wsgi app,最后将response返回给客户端。WSGI server必须要调用application,同时,从application的协议要求可知:

    第一: WSGI server必须向application提供环境参数,因此,自身也必须能够获取环境参数。

    第二: WSGI server接收application的返回值作为响应体。

        则启动wsgi服务器的代码如下

    # wsgiref模块导入:

    from wsgiref.simple_server import make_server

    # 创建一个服务器,IP地址为空,端口是8000,处理函数是application:

    httpd = make_server(服务器ip地址, 8000, application)     #make_server('10.255.255.93',8500, application)

    # 开始监听HTTP请求:

    httpd.serve_forever()

    测试

    >>> import requests,json

    >>>r=requests.get('http://10.255.255.93:8000')

    >>>r.text

    >>>'<h1>Hello, web!</h1>'

    相关文章

      网友评论

          本文标题:python 搭建mock server

          本文链接:https://www.haomeiwen.com/subject/uzlxxktx.html