95 lines
2.8 KiB
Python
95 lines
2.8 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
测试 Binance WebSocket 连接
|
|
"""
|
|
import time
|
|
import sys
|
|
|
|
def test_websocket():
|
|
print("=" * 50)
|
|
print("Binance WebSocket 连接测试")
|
|
print("=" * 50)
|
|
|
|
# 1. 测试基本网络连接
|
|
print("\n1. 测试网络连接...")
|
|
try:
|
|
import socket
|
|
socket.setdefaulttimeout(10)
|
|
socket.socket(socket.AF_INET, socket.SOCK_STREAM).connect(("stream.binance.com", 443))
|
|
print(" ✅ 可以连接到 stream.binance.com:443")
|
|
except Exception as e:
|
|
print(f" ❌ 无法连接到 Binance 服务器: {e}")
|
|
print(" 提示: 可能需要使用代理或 VPN")
|
|
return False
|
|
|
|
# 2. 测试 REST API
|
|
print("\n2. 测试 REST API...")
|
|
try:
|
|
import requests
|
|
resp = requests.get("https://api.binance.com/api/v3/ping", timeout=10)
|
|
if resp.status_code == 200:
|
|
print(" ✅ REST API 正常")
|
|
else:
|
|
print(f" ❌ REST API 返回状态码: {resp.status_code}")
|
|
except Exception as e:
|
|
print(f" ❌ REST API 请求失败: {e}")
|
|
|
|
# 3. 测试 WebSocket 连接
|
|
print("\n3. 测试 WebSocket 连接...")
|
|
try:
|
|
from binance import ThreadedWebsocketManager
|
|
|
|
received_data = []
|
|
|
|
def handle_message(msg):
|
|
if msg.get('e') == 'error':
|
|
print(f" ❌ WebSocket 错误: {msg}")
|
|
else:
|
|
symbol = msg.get('s', 'unknown')
|
|
price = msg.get('c', 'unknown')
|
|
received_data.append(msg)
|
|
print(f" 📊 收到数据: {symbol} = ${price}")
|
|
|
|
print(" 正在启动 WebSocket...")
|
|
twm = ThreadedWebsocketManager()
|
|
twm.start()
|
|
|
|
# 等待启动
|
|
time.sleep(2)
|
|
|
|
print(" 正在订阅 BTCUSDT...")
|
|
twm.start_symbol_ticker_socket(callback=handle_message, symbol="BTCUSDT")
|
|
|
|
# 等待数据
|
|
print(" 等待数据 (10秒)...")
|
|
for i in range(10):
|
|
time.sleep(1)
|
|
if received_data:
|
|
print(f"\n ✅ WebSocket 连接正常!已收到 {len(received_data)} 条数据")
|
|
twm.stop()
|
|
return True
|
|
|
|
print(" ❌ 10秒内未收到任何数据")
|
|
twm.stop()
|
|
return False
|
|
|
|
except Exception as e:
|
|
print(f" ❌ WebSocket 测试失败: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
return False
|
|
|
|
|
|
if __name__ == "__main__":
|
|
success = test_websocket()
|
|
print("\n" + "=" * 50)
|
|
if success:
|
|
print("结论: WebSocket 连接正常")
|
|
else:
|
|
print("结论: WebSocket 连接有问题")
|
|
print("\n可能的解决方案:")
|
|
print("1. 检查网络连接")
|
|
print("2. 使用代理/VPN (某些地区无法直接访问 Binance)")
|
|
print("3. 检查防火墙设置")
|
|
print("=" * 50)
|