使用CCXT异步请求Bybit接口遭遇403错误,同步请求正常
解决CCXT异步请求Bybit接口403拦截问题
问题描述
使用CCXT的async_support模块编写Python异步代码请求Bybit接口时,收到403错误提示请求被拦截,但同步方式请求一切正常。
异步代码示例:
import ccxt.async_support as ccxt import asyncio async def main(): exchange = ccxt.bybit() await exchange.load_markets() symbol = 'BTC/USDT' ticker = await exchange.fetch_ticker(symbol) print(f'BTC/USDT 当前价格: {ticker["last"]}') asyncio.run(main())
收到的错误信息:
请求链接:https://api.bybit.com/v5/market/instruments-info?category=spot
Request blocked.
目前无法连接到此应用或网站的服务器。可能是流量过大或配置错误。请稍后重试,或联系应用或网站所有者。
如果您通过CloudFront向客户提供内容,可以查看CloudFront文档了解故障排除步骤并帮助防止此错误。
可能原因及解决方案
Bybit的CloudFront反爬机制可能识别了异步请求的默认特征(比如请求头、并发模式),以下是几种可行的解决方法:
1. 自定义请求头(模拟常规UA)
异步版本CCXT的默认请求UA可能和同步版存在差异,手动设置为常见浏览器UA或同步版UA:
import ccxt.async_support as ccxt import asyncio async def main(): exchange = ccxt.bybit({ 'headers': { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36' } }) await exchange.load_markets() symbol = 'BTC/USDT' ticker = await exchange.fetch_ticker(symbol) print(f'BTC/USDT 当前价格: {ticker["last"]}') await exchange.close() # 异步版本必须手动关闭连接池 asyncio.run(main())
2. 启用请求速率限制
异步请求可能因并发过高触发反爬,开启enableRateLimit并配置合理间隔:
import ccxt.async_support as ccxt import asyncio async def main(): exchange = ccxt.bybit({ 'enableRateLimit': True, 'rateLimit': 1000 # 每次请求间隔1秒 }) await exchange.load_markets() symbol = 'BTC/USDT' ticker = await exchange.fetch_ticker(symbol) print(f'BTC/USDT 当前价格: {ticker["last"]}') await exchange.close() asyncio.run(main())
3. 替换API端点域名
尝试使用Bybit的备用API域名,绕过CloudFront的CDN拦截:
import ccxt.async_support as ccxt import asyncio async def main(): exchange = ccxt.bybit({ 'urls': { 'api': { 'spot': 'https://api.bytick.com/v5' } } }) await exchange.load_markets() symbol = 'BTC/USDT' ticker = await exchange.fetch_ticker(symbol) print(f'BTC/USDT 当前价格: {ticker["last"]}') await exchange.close() asyncio.run(main())
4. 务必关闭异步连接池
异步版本CCXT如果不手动关闭连接池,残留的连接可能被识别为异常请求,代码结束前必须调用await exchange.close()。
注意事项
- 测试时先从单次请求验证,再逐步增加并发量
- 不要频繁修改请求头或参数,避免触发更严格的反爬策略
- 若以上方法无效,可尝试使用高质量代理IP
内容的提问来源于stack exchange,提问作者Александр Ивонин
相关产品推荐
相关产品推荐

