我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第21篇文章,点击查看活动详情
发送HTTPS请求
随着对安全性的要求越来越高,HTTP渐渐被HTTPS所取代,而requests的库也在不断地完
善,最新的requests模块中自带了一个certifi包,requests会试图使用它里边的证书。这样用户就可以在不修改代码的情况下更新它们的可信任证书。certifi模块如图所示。
不需要修改请求的代码,只需要将URL替换成HTTPS,就可以发送HTTPS的请求了。
实例代码:
1 import requests
2 headers ={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64)Applewebkit/537.36 (KHTML, like Gecko)Chrome/55.0.2883.87 Safari/537.36")
3 test_url="https://www.zhihu.com/"
4 r=requests.get(test_url,headers=headers)
5 print(r.status_code)
6 print (r.headers)
7 print(r.text)
运行结果如图所示
当然也会遇到一些特有的证书不在certifi包中,这时候就需要先通过浏览器找到需要的证书名称,然后通过浏览器设置中的证书选项导出对应的证书和密钥,加上一个cert参数指定证书和密钥的路径就可以了。
发送 WebSocket 请求
之前介绍的requests模块是基于HTTP协议的,所以如果要发送WebSocket 请求就需要安装 第三方的WebSocket模块。
通过 pip安装就可以了。
pip install websocket
pip install websocket-client
然后同理导入该模块就可以使用WebSocket模块的功能发送请求了。 import websocket
后面会通过实例来介绍 WebSocket的具体使用方法。
请求与响应
WebSocket 语法也是相当简单的,先发送一个WebSocket的请求连接,通道连接成功之后可 以发送消息,也可接受消息。语法格式如下:
变量=websocket.create_connection(ur1)
建立连接,只不过此时的URL不是以HTTP开头的,而是以ws开头的。
变量.send(发送内容)
发送带内容的消息,可以是字符串,也可以是列表字典,具体需要看服务器端接收什么数据。
变量.recv()
接收服务器发送的消息,这个区别于HTTP的response的地方在于:接收消息是没有超时机 制的。也就是说一旦建立连接通道之后,就会一直处于等待待命状态,直到接收到数据才会关闭 recv0方法,但如果要一直接收数据,则需要通过循环执行recv(方法,当收到一条消息时,关闭 recv0结束一次循环。之后会在自动化测试中讲到循环结构,这里先不做介绍了。
所以WebSocket 相对HTTP还是简单很多,建立连接,然后发送消息和接收消息
请求实例
通过一个实例来介绍WebSocket吧,这是一个聊天室系统,就是通过WebSocket实现的发送 消息和接收消息,而需要测试的就是发送消息和接受消息是否成功。
实例代码:
1 import websocket
2 ur1="ws://www.xxxx.com/xxxx"
3 ws=websocket.create_connection(ur1)
4 ws.send("{"request":1111,"service":1001,"name":"xxxx"}")
5 new_msg=ws.recv()
6print (new_msg)
7 ws.send("{"request":"1111, "service":1003, "name":"x", "message":"1111111"}")
8 new_msg1=ws.recv()
9 print (new_msg1)
代码说明:
3 使用WebSocket的create_connection 方法向聊天室的URL发起连接,并赋值给变量SM
4 连接完成之后通过sendO方法发送请求的内容,即登录所需要的信息。
5 将服务器返回的内容赋值给new_msg,即登录成功/失败的返回信息,一般正常情况都是成功的。
7 再次通过sendO方法,发送聊天室内容“a”到服务器。
8 将服务器返回的内容赋值给 new_msg1,即发送消息成功/失败的返回信息,一般也是会成功的。
运行结果如图所示。