Ropsten网络调用Etherscan API返回403错误(Postman、主网请求正常)
问题原因分析
- User-Agent识别拦截:requests库发起请求时默认会携带
User-Agent: python-requests/[版本号]的请求头,Etherscan的Ropsten测试网API部署了更严格的Cloudflare反爬规则,会直接拦截这类爬虫特征明显的UA;而主网API的反爬阈值更高,Postman发起请求时携带的是Postman专属UA,不会被拦截,因此出现你描述的差异情况。 - Ropsten网络已正式停止维护,部分节点服务的访问规则做了特殊限制,偶发会拒绝非常规客户端的请求。
解决方案
方案1:自定义请求头伪装UA
在发起请求时添加自定义User-Agent头,伪装为普通浏览器或者Postman的UA即可,修改后的代码示例:
import requests response = requests.get( "https://api-ropsten.etherscan.io/api", params={ "module": "account", "action": "balance", "address": "0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae", "tag": "latest", "apikey": "MyApiKey", }, # 新增headers参数,自定义UA headers={ "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" } )
如果想要和Postman完全一致,可以在Postman的请求日志里复制它的UA填入即可。
方案2:更换仍在维护的以太坊测试网
Ropsten测试网已经在2022年第四季度正式弃用,Etherscan对该网络的API支持随时可能下线,建议将测试链切换为Sepolia或者Goerli,对应的API端点分别为https://api-sepolia.etherscan.io/api和https://api-goerli.etherscan.io/api,请求参数和主网完全一致,适配成本极低。
内容的提问来源于stack exchange,提问作者tinom9
相关产品推荐
相关产品推荐

