React Native Android端请求BSCSCAN测试网API返回403但iOS正常如何解决
问题成因
- 核心原因是BSCscan的API接口部署了WAF防护,会拦截特征明显的非浏览器请求:React Native Android端使用Axios发起请求时,默认携带的User-Agent为
okhttp/版本号这类原生请求标识,会被WAF判定为恶意爬虫直接拦截返回403;iOS端RN底层网络请求默认携带的User-Agent接近Safari浏览器特征,可正常通过校验。 - 次要可能成因:部分低版本Android系统默认未启用TLS 1.2及以上加密协议,而BSCscan API仅支持TLS 1.2+协议的请求,也会触发403错误。
解决方案
方案1:手动配置请求头模拟浏览器请求(首选,90%以上场景可解决)
在Axios请求中补充符合浏览器特征的请求头,示例代码如下:
try { const url = 'https://api-testnet.bscscan.com/api?module=account&action=txlist&address=0x400ee0c820144c8bb559ace1ad75e5c13e750334&sort=desc&apikey=P3A263376TPJHKQ5IXUD4VHUNFQKDJB4G5'; const response = await axios.get(url, { headers: { // 可替换为任意正常浏览器的User-Agent 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8', 'Accept-Language': 'en-US,en;q=0.5', 'Accept-Encoding': 'gzip, deflate, br' } }); } catch (error) { throw error; }
方案2:适配低版本Android系统TLS协议
如果你的APP需要兼容Android 5.0-6.0系统,可在安卓原生配置中强制启用TLS 1.2+:
- 打开安卓项目
android/app/src/main/AndroidManifest.xml,在application节点添加配置:
<application ... android:networkSecurityConfig="@xml/network_security_config" ...>
- 在
android/app/src/main/res/xml目录下新建network_security_config.xml文件,添加如下内容:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">api-testnet.bscscan.com</domain> </domain-config> <base-config> <tls-config> <versions> <tls version="TLSv1.2" /> <tls version="TLSv1.3" /> </versions> </tls-config> </base-config> </network-security-config>
方案3:排查本地网络因素
如果以上方案无效,可检查安卓设备/模拟器是否使用了代理、VPN,或者当前IP是否被BSCscan临时封禁,切换手机流量测试即可验证。
内容的提问来源于stack exchange,提问作者VuongLQ
相关产品推荐
相关产品推荐

