使用python做服务端与浏览器交互尝试

工作时候为了整理配合测试所编写的脚本,就想着能整合脚本内容在一个服务上

主要目的是为了:

1.现有的脚本输出全部保存成了CSV文件,每次检查有点麻烦而且输出内容多结果不够直观,想用网页整合一下输出格式

2.脚本内容功能相对独立,为了更好的维护想分成不同模块,有界面同时方便大家使用不用盯着辣么多脚本内容

3.研究这个增加了投入的精力成本,但是总的来说可以为后续版本的测试迭代抽象成一个新的监控系统,看起来牛逼点不是?

 

所以想着做一个本地服务把内容重新整合一下,不过我也不太会用python做web内容,目前先熟悉一下所需要的基础内容

这里打算使用socket去处理,之所以没选择框架,一个是为了保证测试工程是轻量级的,打算自己封装一下也是通过python去略深入学习一下http协议(大学课程这方面内容都睡过去了,出来混总要还的)。第二,公司的内网环境,我到哪找框架去用。有充分的外网权限的话我干嘛不用java把内容部署在Tomcat上得了,反正我也不会python,还能咋办呢

 

经过百度,先从最简单的服务开始搞起

直接运行后就在等待请求过来

使用python做服务端与浏览器交互尝试

 

 

浏览器输入请求得到了返回

使用python做服务端与浏览器交互尝试

 

再看控制台结果,OK看来是能获取到一些东西的,虽然我也不懂这些是什么

使用python做服务端与浏览器交互尝试

 

 

然后对于上面的脚本做一点说明记录:

关于socket是啥,em…….还是百度看看吧,这里面东西太多了,涉及网络通信方面的内容,就不展开记录了

conn.sendall(bytes("HTTP/1.1 200 OK\r\n\r\n","utf-8")) 这里的返回格式是必须的

特意百度了一下这个HTTP/1.1 201 OK\r\n\r\n,这个其实是HTTP协议响应报文格式,必须要这样紫滴,而且这个是200状态,换成500浏览器那边可以看出来是报红的状态

使用python做服务端与浏览器交互尝试

 

具体可以再翻阅一下HTTP相关的标准协议内容,也不展开了

反正代码也是百度后贴过来的

反正这样交互是可以进行的了,然后考虑增加页面和url解析去访问指定页面,继续上****看看怎么做

。。。。。。

从之前控制台的打印结果来看,从浏览器url输入http://localhost:8000/并且回车后实际是发了两次get请求的

 

使用python做服务端与浏览器交互尝试

 

 

使用python做服务端与浏览器交互尝试

那这次我开始加入URL想要的内容

比如这样http://localhost:8000/mainPage,看看控制台返回了啥

 

使用python做服务端与浏览器交互尝试

也就是说,我要把这里的东西Referer拿到进行解析,继续百度python如何解析URL

一通百度,增加了如下代码,看图吧

其实总体思路就是通过正则表达式把url成分中的关键字给捞出来,然后走一个分支,这个分支解析html文件,把文件解码后塞进去返回给浏览器

使用python做服务端与浏览器交互尝试

 

返回结果,这样一来总体流程就打通了

 

使用python做服务端与浏览器交互尝试

 

后续则可以用以上套路为原型尝试建立起本地服务,页面上添加一些按钮发送不同的请求,本地后端接入处理,当前目的是通过在本地运行服务作为测试的辅助工具去剥离一些机械的手工计算减少手工的工作量

 

Oh 源码再贴一下,明儿上班去公司直接贴了改

import socket
import re

if __name__ == '__main__':

    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.bind(("127.0.0.1",8000))
    server.listen(5)
    while True:
        conn,addr = server.accept()
        print("my_conn:",conn)
        print("my_addr:",addr)

        msg = conn.recv(102400).decode("utf-8")
        print("my_msg:",msg)
        request_lines = msg.splitlines()
        keyWords = re.match(r'[^/]+([^ ]*)', request_lines[0]).group(1)
        print("find the keywords:",keyWords)
        if keyWords == "/mainPage":
            print("Go to the main page")
            f = open("./pages/mainPage.html", "rb")
            htmlContent = f.read()
            f.close()
            head = "HTTP/1.1 200 OK\r\n\r\n"
            conn.sendall(head.encode("utf-8"))
            conn.sendall(htmlContent)
        else:
            conn.sendall(bytes("HTTP/1.1 200 OK\r\n\r\n", "utf-8"))
            conn.sendall(bytes("<h1>hello world!</h1><h2>got it</h2>", "utf-8"))
        conn.close()