You need to enable JavaScript to run this app. web3.py如何通过用户名密码认证连接Ankr BSC API
优惠活动
大模型
产品
解决方案
定价
更多

web3.py如何通过用户名密码认证连接Ankr BSC API

web3.py连接带鉴权的Ankr BSC节点实现

核心问题根因

你当前连接返回False的核心原因是请求鉴权头格式不匹配,和节点地址、密钥有效性无关——你用requests直接请求能正常响应,已经可以证明地址、密钥本身没有问题。
你之前Node.js端能跑通的实现,走的是标准HTTP Basic Auth鉴权流程:将拼接后的用户名:密码字符串做Base64编码,统一放到Authorization请求头中,格式为Basic <Base64编码串>。你之前用requests能成功请求,本质是requests库的鉴权参数会自动按这个格式生成请求头;但你手写的Python web3.py代码,是将Username、Password拆为两个独立的请求头发送,这种非标准的头格式节点无法识别,自然会连接校验失败。

正确实现代码

import base64
from web3 import Web3

# 替换为个人实际配置
ANKR_BSC_RPC_URL = "你的Ankr BSC节点完整接入地址"
ANKR_USER = "你的Ankr节点鉴权用户名"
ANKR_PWD = "你的Ankr节点鉴权密码"

# 按Basic Auth标准格式生成鉴权头
auth_content = f"{ANKR_USER}:{ANKR_PWD}"
encoded_auth = base64.b64encode(auth_content.encode("utf-8")).decode("utf-8")

web3 = Web3(
    Web3.HTTPProvider(
        ANKR_BSC_RPC_URL,
        request_kwargs={
            "headers": {
                "Authorization": f"Basic {encoded_auth}"
            }
        }
    )
)

# 注意版本兼容:web3.py v6+ 使用is_connected(),旧版本(v5及更早)使用isConnected()
print(web3.is_connected())

容易踩的细节问题

  • 不要将用户名、密码拆分为两个独立的请求头字段,所有支持Basic Auth的节点均统一识别Authorization头的固定格式
  • 注意web3.py的版本方法名差异:v6版本对之前的驼峰命名方法做了废弃替换,沿用旧的isConnected()也可能出现连接判断异常
  • 如果通过WSS协议连接Ankr节点,鉴权头的生成逻辑完全一致,仅需将HTTPProvider替换为WebsocketProvider,将生成好的鉴权头传入对应配置即可

内容的提问来源于stack exchange,提问作者Vic Rokx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 12:45:05