python测试websocket接口
1、什么是webscoket?
WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。HTML5 WebSocket 设计出来的目的就是要取代轮询和 Comet 技术,使客户端浏览器具备像 C/S 架构下桌面系统的实时通讯能力。
WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
1.1 webSocket 握手协议
这些请求和通常的 HTTP 请求很相似,但是其中有些内容是和 WebSocket 协议密切相关的。我们需要简单介绍一下这些请求和应答信息,”Upgrade:WebSocket”表示这是一个特殊的 HTTP 请求,请求的目的就是要将客户端和服务器端的通讯协议从 HTTP 协议升级到 WebSocket 协议。从客户端到服务器端请求的信息里包含有”Sec-WebSocket-Key”这样的头信息。这是客户端浏览器需要向服务器端提供的握手信息,服务器端解析这些头信息,并在握手的过程中依据这些信息生成一个 16 位的安全密钥并返回给客户端,以表明服务器端获取了客户端的请求,同意创建 WebSocket 连接。一旦连接建立,客户端和服务器端就可以通过这个通道双向传输数据了。
1.2 webscoket的属性、方法和事件
2、测试环境搭建
- 安装python,版本3.0以上
- 安装IDE,pycharm等
- 安装websocket、websocket-client 包
3、websocket接口测试
以下实例采用了长连接调用方式。
先来看一下,长连接调用方式:
ws = websocket.WebSocketApp("ws://echo.websocket.org/",
on_message = on_message,
on_error = on_error,
on_close = on_close)
ws.on_open = on_open
ws.run_forever()
长连接关键方法:ws.run_forever(ping_interval=60,ping_timeout=5)。
import websocket
from websocket import ABNF
import json
import _thread
import time
url = "ws://echo.websocket.org/" # 接口地址
wav_path="D:/audio_file/001/001M26_01_01_0001.pcm" #音频文件地址
def on_message(ws, message):
print(message)
def on_error(ws, error):
print(error)
def on_close(ws):
print("close connection")
def on_open(ws):
def run(*args):
content = {
"mid": "1508232047195",
"version": "1.0",
"request": {
"timestamp": 1508232047195,
"sessionId": "aaaadsfasdfkop"
},
"params": {
"audio": {
"audioType": "wav",
"sampleRate": 16000,
"channel": 1,
"sampleBytes": 2
}
}
}
ws.send(json.dumps(content))
step = 3200
with open(wav_path, 'rb') as f:
while True:
read_data = f.read(step)
if read_data:
ws.send(read_data, ABNF.OPCODE_BINARY)
if len(read_data) < step:
break
time.sleep(0.1)
ws.send('', ABNF.OPCODE_BINARY)
time.sleep(1.5)
ws.close()
_thread.start_new_thread(run, ())
if __name__ == "__main__":
websocket.enableTrace(True)
ws = websocket.WebSocketApp(url,
on_message = on_message,
on_error = on_error,
on_close = on_close)
ws.on_open = on_open
ws.run_forever()