Python3连接WebSocket遇HTTP 403错误请求技术协助
解决WebSocket连接HTTP 403错误
出现HTTP 403错误,是因为服务器对WebSocket握手请求做了校验,拒绝了无合法请求头的客户端连接。网页端能正常连接是因为浏览器会自动携带必要的请求头,而websockets库默认不会添加这些头。
解决方法是在建立连接时手动添加模拟浏览器的请求头,比如User-Agent和Origin:
import asyncio import websockets async def handler(websocket): while True: message = await websocket.recv() print(message) async def main(): url = "wss://io.dexscreener.com/dex/screener/pairs/h6/1?rankBy[key]=volume&rankBy[order]=desc&filters[buys][h1][min]=100&filters[sells][h1][min]=100&filters[liquidity][min]=500&filters[pairAge][max]=1&filters[chainIds][0]=bsc" # 添加模拟浏览器的请求头 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", "Origin": "https://dexscreener.com" } async with websockets.connect(url, extra_headers=headers) as ws: await handler(ws) await asyncio.Future() # run forever if __name__ == "__main__": asyncio.run(main())
关键说明:
User-Agent:模拟浏览器标识,让服务器认为请求来自合法的浏览器客户端Origin:指定请求来源,很多WebSocket服务器会校验这个字段,确保请求来自允许的域名
如果添加后仍然报错,可以尝试抓包网页端的WebSocket握手请求,对比请求头,补充缺失的字段(比如Sec-WebSocket-Protocol等),确保Python请求的头和浏览器完全一致。
内容的提问来源于stack exchange,提问作者bsa102014
相关产品推荐
相关产品推荐

