广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python搭建HTTP服务
  • 207
分享到

Python搭建HTTP服务

PythonHTTP 2023-01-31 03:01:36 207人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

背景 本次我们要为一个自动化测试工具搭建一个Http服务,以方便一个本地的测试工具被大家在网络中共享使用。 一、方案选择: python Socket 二、选择理由 底层测试工具由Python编写,因此使用python搭建HTTP服务

背景

本次我们要为一个自动化测试工具搭建一个Http服务,以方便一个本地的测试工具被大家在网络中共享使用。

一、方案选择:

python Socket

二、选择理由

  • 底层测试工具由Python编写,因此使用python搭建HTTP服务兼可操作性强,同时可以对工具进行二次开发

  • Socket模块,为python自带的库,使用socket搭建HTTP服务非常简单方便并且可以编程

我们直接通过架构图来了解一下本次的服务架构



从架构图中可以看到整个流程为:

  • 用户发送httpRequset到httpserver

  • httpServer解析请求,生成调用测试工具所需的命令/用例,调用工具对外接口

  • testtool执行测试,生成结果并返回给httpServer

  • httpServer将结果封装成JSON字符串,返回给用户

1.首先,我们需要建立一个服务,建立服务我们考虑以下四个因素:

1)        url : HTTP服务 url,可以是ip地址也可以是域名等等,如果不传则默认本机ip地址

2)        port : HTTP服务端口号,注意不要填写已被占用端口号,默认8901

3)        recvNum : HTTP服务最大连接数,超过此连接数则无法请求成功 ,默认20

4)        logLevel : HTTP服务后台日志级别 ,1:debug,2:info,3:warning,4:error ,默认 2


将这四个因素作为服务脚本的参数,方便在启动服务时,对服务进行设置




这里设计,参数传入形式为name=value,这样设计的好处为参数可传可不传,参数位置无需固定

2.之后就是使用socket库建立一个服务了




这里有两点要注意:

1)self.url是外部传入的url参数,当外部传入了url参数时,使用外部url参数作为服务地址。如果没有传入url,则通过

myname =socket.getfqdn(socket.gethostname())

host = socket.gethostbyname(myname)

方法获取本机ip地址作为url


2)listenSocket =socket.socket(socket.AF_INET, socket.SOCK_STREAM)

建立一个socket对象,对象的属性为socket.AF_INET(使用互联网基础协议ipv4), socket.SOCK_STREAM(流式socket(tcp))

 

listenSocket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR, 1)

为listenSocket对象设置更多属性,socket.SOL_SOCKET(在套接字级别), socket.SO_REUSEADDR(打开或关闭地址复用功能),1(开启)。总体来说这句话的意思就是设置允许多个客户端连接服务,无需等待

 

关于这两个方法的参数说明,提供一个明细列表:

AF_INET:ipv4, AF_INET6:ipv6 , AF_UNIX:只能够用于单一的Unix系统进程间通信

SOCK_STREAM:流式socket(TCP) ,数据报式socket(UDP)

在套接字级别上(SOL_SOCKET),option_name可以有以下取值:


SO_DEBUG,打开或关闭调试信息。

SO_REUSEADDR,打开或关闭地址复用功能。

SO_DONTROUTE,打开或关闭路由查找功能。

SO_BROADCAST,允许或禁止发送广播数据。

SO_SNDBUF,设置发送缓冲区的大小。其上限为256 * (sizeof(struct sk_buff) + 256),下限为2048字节。

SO_RCVBUF,设置接收缓冲区的大小。上下限分别是:256 * (sizeof(struct sk_buff) + 256)和256字节。

SO_KEEPALIVE,套接字保活。

SO_OOBINLINE,紧急数据放入普通数据流。

SO_NO_CHECK,打开或关闭校验和。

SO_PRIORITY,设置在套接字发送的所有包的协议定义优先权。

SO_LINGER,如果选择此选项,close或 shutdown将等到所有套接字里排队的消息成功发送或到达延迟时间后才会返回.否则, 调用将立即返回。

SO_PASSCRED,允许或禁止SCM_CREDENTIALS控制消息的接收。

SO_TIMESTAMP,打开或关闭数据报中的时间戳接收。

SO_RCVLOWAT,设置接收数据前的缓冲区内的最小字节数。

SO_RCVTIMEO,设置接收超时时间。

SO_SNDTIMEO,设置发送超时时间。

SO_BINDTODEVICE,将套接字绑定到一个特定的设备上。

         SO_ATTACH_FILTER和SO_DETACH_FILTER。


3)listenSocket.bind((host,self.port))

绑定地址和端口


4)listenSocket.listen(self.recvNum)

监听地址,同时设置最大连接数

到此为止服务就建立完成了,但光建立服务是不够的,我们还需接收请求,并对请求做出回应

1.接收请求

1) 通常情况下,HTTP服务是一直存在的,除非外部干预,否则HTTP就不会停止,因此这里我们可以使用while True死循环保证服务一直处于工作状态

2)接收客户端发送的请求时,我们设置一个接受内容的最大字节数




 

 

2.请求解析

接收到请求后,对请求内容进行解析,得到我们需要的数据





这里专门定义了一个类,来进行请求内容的解析,大致的功能就是把请求的正文提取出来,生成一个字典数据类型,将用例信息存放在字典中。


同时,我们还能看到我们在处理完请求以后,立即生成了一个jobId,并返回给客户端,这步操作的作用是,防止后台测试工具处理时间较长,造成http连接超时,同时也是为了防止用户长时间等待,但并不知道请求是否发送成功。因此先返回一个唯一id,告诉用户服务已经在处理,这样用户就可以根据id来等待返回结果了。





调用测试工具,预先需要做几个准备工具

  • 首先,测试工具需提供一个对外的接口,以供外部调用,并将请求传递给测试工具

  • 其次,测试工具需要解析请求内容,以便在内部执行

  • 最后,测试工具对外接口要提供返回值,以便外部调用及时接收结果

因此不满则这三个条件的工具,需要对工具进行一定程度上的二次开发,以满足要求

 

这里我们已经将后台的testtool进行了改造,并提供了一个对外接口Script_new .RunTest. run_test()。详细情况就不再这里进行介绍了。

 

另外,这里建议大家,如果返回结果较为复杂,不是简单0/1这种形式的话,就好把返回结果组织成json字符串返回,以便客户端解析。


如果想要得到json字符串,建议大家现将结果存在一个 dict容器中。这样做的好处是,dict可以通过json.dumps()方法直接转换成json字符串,省去数据转换的过程,高效快捷。


这里我们可以看到返回的responseBody 就是一个dict




通过 json.dumps 我们可以直接得到json字符串,最后通过sendall方法发送结果

 

1.由于HTTP服务要长期存在,因此,代码不能在出现异常时就崩溃退出。需要添加异常捕获机制,将异抛出,并记录在日志中。

并且异常捕获的位置和捕获单位都需要特别注意




2.建议返回结果后,主动关闭连接,即clientConnection.close()

3.添加必要的日志信息,以便时刻掌握服务状态




--结束END--

本文标题: Python搭建HTTP服务

本文链接: https://www.lsjlt.com/news/187587.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python搭建HTTP服务
    背景 本次我们要为一个自动化测试工具搭建一个HTTP服务,以方便一个本地的测试工具被大家在网络中共享使用。 一、方案选择: Python socket 二、选择理由 底层测试工具由python编写,因此使用python搭建HTTP服务...
    99+
    2023-01-31
    Python HTTP
  • Python搭建简易HTTP服务(3.x
    原文转载地址:http://www.cnblogs.com/91allan/p/4889167.html 废话不多说,我们工作时经常会用到需要HTTP服务,如果不想搞那些复杂的Apache、IIS服务器等,这时我们就可以用python...
    99+
    2023-01-31
    简易 Python HTTP
  • Python搭建HTTP服务器和FTP服务器
    本教程为大家分享了Python搭建HTTP服务器和FTP服务器的具体步骤,供大家参考,具体内容如下 默认安装版本为pytho2.7 http服务器搭建教程: 进入要开放访问的目录下,执行命令:python ...
    99+
    2022-06-04
    服务器 Python HTTP
  • 【C++】搭建HTTP服务器
    目录 项目介绍 网络协议栈介绍 协议分层 数据的封装与分用 HTTP相关知识介绍 HTTP的特点 URL格式 URI、URL、URN HTTP的协议格式 HTTP的请求方法 HTTP的状态码 HTTP常见的Header CGI机制介绍 CG...
    99+
    2023-09-17
    网络 网络协议
  • Windows搭建HTTP服务器
    Windows搭建HTTP服务器 1、开启Windows功能 打开控制面板-程序和功能-启用或关闭Windows功能,勾选Internet information services下拉框的全部选项。 2、搭建HTTP服务器 搜索IIS,...
    99+
    2023-09-02
    服务器 windows 网络
  • Golang搭建HTTP服务器
    目录一. 安装Golang二. 搭建HTTP服务器三. 扩展HTTP服务器处理HTTP请求处理参数处理静态文件四. 总结一. 安装Golang 在开始之前,我们需要先安装好Golan...
    99+
    2023-05-16
    Golang搭建HTTP服务器 Golang HTTP服务器 Golang 服务器
  • windows环境搭建http服务器
    开启windows功能 进入电脑控制面板-程序-启用或关闭windows功能 2.勾选这3个功能以及展开的全部勾选 搭建http服务器 打开Internet Information Server(IIS)管理器,在开始菜单里面找到IIS...
    99+
    2023-08-18
    服务器 windows http
  • 如何搭建nodejs http服务器
    这篇文章主要介绍如何搭建nodejs http服务器,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!搭建简单的nodejs服务器通过一些简单配置我们就可以搭建一台基于nodejs的ht...
    99+
    2022-10-19
    nodejs 服务器
  • Node.js怎么搭建HTTP服务器
    这篇文章主要介绍“Node.js怎么搭建HTTP服务器”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Node.js怎么搭建HTTP服务器”文章能帮助大家解决问题。什...
    99+
    2022-12-03
    node.js http
  • Golang如何搭建HTTP服务器
    这篇文章主要讲解了“Golang如何搭建HTTP服务器”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Golang如何搭建HTTP服务器”吧!一. 安装Golang在开始之前,我们需要先安装好...
    99+
    2023-07-06
  • Android设备搭建http服务---------AndServer
    项目中引用AndServer implementation 'com.yanzhenjie.andserver:api:2.1.10' 在项目的根build.gradle文件(不是app那个moudle的build.gradle)最顶部添加...
    99+
    2023-12-23
    android http 服务器
  • 基于Node.js的http模块搭建HTTP服务器
    目录http 模块代码剖析request 解析URL 解析请求体解析response 设置发送 http 请求GETPOST诡异之处当你第一次接触工程化的项目时,看到项目控制台正在 ...
    99+
    2022-11-13
    Node.js搭建http服务器 http服务器搭建
  • Python快速搭建http服务器和FTP服务器的步骤
    本篇内容介绍了“Python快速搭建http服务器和FTP服务器的步骤”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!实验如下:机器ip: 1...
    99+
    2023-06-06
  • python 搭建简单的http ser
    server: #coding=utf-8 from BaseHTTPServer import BaseHTTPRequestHandler import cgi class PostHandler(BaseHTTPRequestH...
    99+
    2023-01-31
    简单 python ser
  • oaptt搭建http服务的过程详解
    Oat++ 介绍 Oat++ 主页:https://oatpp.io Oat++ 文档:https://oatpp.io/docs/start GitHub 地址:https://g...
    99+
    2022-11-13
    oaptt搭建http服务 oaptt http服务
  • Linux系统怎样搭建HTTP服务器
    Linux系统怎样搭建HTTP服务器,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 HTTP服务器一般是指网站服务器,是指某类计算机驻留在互联网的程序...
    99+
    2023-06-28
  • 利用node.js本地搭建HTTP服务器
    我们的目的比较简单,利用node.js在本地搭建HTTP服务器,实现hello word。 系统环境: win7 64bitIP:127.0.0.1Node.js:v6.10.2Npm:3.10.10Git...
    99+
    2022-06-04
    服务器 node js
  • nodejs搭建本地http服务器教程
    由于不做php相关的东西,懒得装apache,干脆利用nodejs搭建一个本地的服务器用于测试。 nodejs这玩意儿吧,对做前端的介入后端简直就是一把利器。而且目前,nodejs也越来越有商用价值。 no...
    99+
    2022-06-04
    服务器 教程 nodejs
  • 怎么使用Node.js搭建HTTP服务器
    本篇内容主要讲解“怎么使用Node.js搭建HTTP服务器”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Node.js搭建HTTP服务器”吧!什么是 HTTP 服务?HTTP 协议是什么...
    99+
    2023-06-17
  • 如何使用Node.js搭建HTTP服务器
    这篇文章将为大家详细讲解有关如何使用Node.js搭建HTTP服务器,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。什么是 HTTP 服务?HTTP 协议是什么?超文本传输协议,一个应用层协议,一个在计算机...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作