Python Web3 通过用户名和密码连接到 Ankr 币安智能链 API

Python Web3 connect to Ankr Binance Smart Chain API, through user and password

也许这是一个愚蠢的问题,但对于 web3.js 可以选择使用另一个 API 服务 Ankr,而不是 Infura。 Ankr 允许访问费用较低的 BSC 网络。我似乎无法弄清楚如何通过 python web3 连接到 Ankr,因为它需要使用用户名和密码进行身份验证。当我 运行 python 代码时,它 returns 为假。我不确定我应该为 web3.py 使用哪些键,或者调用的语法可能是错误的,当我使用请求库时一切正常,所以这不是地址问题。

# Python Code Unsuccessful 
Ankr_bsc_url = 'https............' 
web3 = Web3(Web3.HTTPProvider(Ankr_bsc_url, request_kwargs={'headers': {'Username': user, 'Password': password}}))

print(web3.isConnected())



//Node.js Code web3.js Works
const web3Provider = new Web3.providers.WebsocketProvider(url, {
 headers: { authorization: `Basic ${Buffer.from(`${user}:${password}`).toString('base64')}`}
})

您应该将 headers 保存在 Session object 上,并将其作为 HTTPProvider

的参数传递
from web3 import Web3
import requests

s = requests.Session()
s.headers.update({'authorization': 'Basic ZZZZ'})

# HTTPProvider:
w3 = Web3(Web3.HTTPProvider('https://apis.ankr.com/XXXX/YYYY/binance/full/main', session=s))
w3.isConnected()

以我为例 w3.isConnected return True

我发现以下方法在连接到需要用户名和密码的“基本身份验证”方法时效果很好。

或者,使用“令牌”方法不需要用户名和密码,这也成功地为您提供了一个 Ankr API 端点。

from web3 import Web3
import requests
import base64

ankr_eth_url = 'INSERT_ANKR_API_ENDPOINT'
s = requests.Session()

# Make sure to use the Project Username and not your log-in username
# myProjectUsername:password
upass = "myProjectUsername:12345678".encode("ascii")
b64 = base64.b64encode(upass).decode("ascii")

s.headers.update({'Authorization': 'Basic ' + b64})

w3 = Web3(Web3.HTTPProvider(ankr_eth_url, session=s))
print(w3.isConnected())