Python脚本连接Dexscreener WebSocket时遭遇HTTP 403拒绝错误
解决WebSocket连接HTTP 403错误的思路及修复方案
针对Dexscreener WebSocket连接返回403的问题,结合浏览器请求头对比,可从以下方向排查修复:
1. 补全缺失的请求头
浏览器请求中包含Sec-WebSocket-Extensions头,你的脚本未添加该字段,服务器可能以此作为校验项之一,需补充到headers中。
2. 对齐User-Agent版本
脚本使用的Chrome版本为122,而浏览器捕获的是126,服务器可能对UA版本有校验,建议统一为浏览器中的UA值。
3. 移除手动生成的Sec-WebSocket-Key
websockets库会自动生成并添加Sec-WebSocket-Key,手动设置可能导致服务器验证失败,建议删除该自定义头。
修复后的完整脚本
import asyncio import websockets import json async def dexscreener_scraper(): headers = { "Host": "io.dexscreener.com", "Connection": "Upgrade", "Pragma": "no-cache", "Cache-Control": "no-cache", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36", "Upgrade": "websocket", "Origin": "https://dexscreener.com", "Sec-WebSocket-Version": "13", "Accept-Encoding": "gzip, deflate, br, zstd", "Accept-Language": "en-US,en;q=0.9,ar;q=0.8", "Sec-WebSocket-Extensions": "permessage-deflate; client_max_window_bits" } uri = "wss://io.dexscreener.com/dex/screener/pair/solana/zcdaw3jpcqey8jyvxnvmqs2cu35cyddy4ot7v8ednhz" async with websockets.connect(uri, extra_headers=headers) as websocket: while True: message_raw = await websocket.recv() message = json.loads(message_raw) print(message) await asyncio.sleep(1) if __name__ == "__main__": asyncio.run(dexscreener_scraper())
额外排查点
若上述修改后仍返回403,可尝试:
- 携带浏览器Cookie:打开对应页面,复制Cookie添加到headers中(格式:
"Cookie": "xxx=xxx; yyy=yyy") - 切换网络环境:确认当前IP是否被服务器封禁
内容的提问来源于stack exchange,提问作者Abdelmoula
相关产品推荐
相关产品推荐

