8.11 常见代理
- http/HTTPS:应用层
- socket: 底层协议,抽象的
- sockets: 不关心是什么协议 ,更万能(也是从应用层发起的)
- websocket: 双向的,协议 (比如:聊天框)
- websockets: 工具,这个工具实现了websocket
8.11.1 websockets
应用:微信、QQ (双向通信)
websockets 是对 http的改造
8.11.1.1 客户端代码
ws_client.py
# -*- coding: utf-8 -*- # @Time : 2020/11/21 16:49 # @Author : 饭盆里 # @File : ws_client.py # @Software: PyCharm # @desc : import asyncio import websockets async def hello(): uri = 'ws://127.0.0.1:8211' async with websockets.connect(uri) as websocket: name = input("you are ? ") await websocket.send(name) print(f">>{name}") greeting = await websocket.recv() print(f"<<{greeting}") asyncio.get_event_loop().run_until_complete(hello())
8.11.1.2 服务端代码
ws_server.py
# -*- coding: utf-8 -*- # @Time : 2020/11/21 16:49 # @Author : 饭盆里 # @File : ws_server.py # @Software: PyCharm # @desc : import asyncio import websockets async def hello(websocket,path): name = await websocket.recv() print(f'<<{name}') greeting = f"hello {name}" print(f'>>{greeting}') start_server = websockets.serve(hello,'127.0.0.1',8211) asyncio.get_event_loop().run_until_complete(start_server) asyncio.get_event_loop().run_forever()
8.11.1.3 运行
在终端先运行服务器代码: python ws_server.py
然后在另开一个窗口运行客户端: ws_client.py
则可以在服务器 和 客户端 输出中看到问候
目前遇到一个报错如图:尚未解决???????????????????????????????
8.11.1.4 反向代理实现websockets通讯走Charles
- 将代码服务器的端口改为:8212
- 配置Charles反向代理,将本地发起的请求映射到服务器的端口上
- 则现在发送的请求都会经过Charles
TLS: 是对SSL的改进,SSL的标准化
8.11.2 socket的应用
8.11.2.1 socket:底层通讯机制,多层技术的应用
- socket 是将TCP、UDP等抽象的东西进行了实现
- HTTPS 是对socket的封装 ,HTTPS里面包含了socket、SSL等
8.11.2.2 socket的server端代码
import socket #创建socket对象 s = socket.socket() #绑定端口 s.bind(('127.0.0.1',12345)) #等待客户端连接 s.listen(5) while True: #建立客户端连接 c,addr = s.accept() print("连接地址",addr) c.send('你好'.encode()) c.close()
8.11.2.3 socket的client端代码
import socket s =socket.socket() s.connect(("127.0.0.1",12345)) print('hello') print(s.recv(1024).decode()) s.close()
8.11.2.4 连接
- 服务端:
- 客户端:
- 不能用Charles抓包,可以用tcpdump试试
8.11.3 区别
- websocket:应用层的一个协议
- socket :抽象接口,底层
- socks代理:一种技术