使用 Web3.js HttpProvider 调用 API 时如何向 Ankr 提供凭据?
How to provide credentials to Ankr when calling the API with Web3.js HttpProvider?
我正在尝试访问 Ankr API 地址,例如:
https://apis.ankr.com/XXXX/YYYY/full/main
当通过浏览器访问这个link时,我可以输入我在Ankr面板控件上创建的凭据,我可以成功通过。但是现在我正在尝试在节点上使用 Web3.js 来做到这一点:
var options = {
headers: [
{
name: 'Authorization',
value: 'Basic myUsername:myPassword',
},],};
const web3 = new Web3(new Web3.providers.HttpProvider('https://apis.ankr.com/XXXX/YYYY/full/main', options))
并且我收到了 401 未经授权的错误响应。我假设我的凭据是正确的,因为我可以通过浏览器上的 link 访问它们,但在传递 header 时它们似乎不起作用。代码有什么问题或缺少什么?
您需要传递 myUsername:myPassword
的 base64,而不是实际的明文。
// base64 encoded
value: 'Basic ' + Buffer.from('myUsername:myPassword').toString('base64'),
有关详细信息,请参阅 MDN docs。
问题是凭据必须以某种方式进行哈希处理。
我不知道这是否是最合适的解决方案,但我最终通过浏览器访问地址(https://apis.ankr.com/XXXX/YYYY/full/main)解决了这个问题,在Chrome上打开开发工具,并登录介绍我的证书。
然后我通过检查请求的 HEADER(在 Chrome 上,在 Network>therequest>Request Headers>authorization 中完成)获得了请求中发送的散列凭证。我只是 copy/pasted js 代码上的这个散列凭证并且它有效!
我正在尝试访问 Ankr API 地址,例如:
https://apis.ankr.com/XXXX/YYYY/full/main
当通过浏览器访问这个link时,我可以输入我在Ankr面板控件上创建的凭据,我可以成功通过。但是现在我正在尝试在节点上使用 Web3.js 来做到这一点:
var options = {
headers: [
{
name: 'Authorization',
value: 'Basic myUsername:myPassword',
},],};
const web3 = new Web3(new Web3.providers.HttpProvider('https://apis.ankr.com/XXXX/YYYY/full/main', options))
并且我收到了 401 未经授权的错误响应。我假设我的凭据是正确的,因为我可以通过浏览器上的 link 访问它们,但在传递 header 时它们似乎不起作用。代码有什么问题或缺少什么?
您需要传递 myUsername:myPassword
的 base64,而不是实际的明文。
// base64 encoded
value: 'Basic ' + Buffer.from('myUsername:myPassword').toString('base64'),
有关详细信息,请参阅 MDN docs。
问题是凭据必须以某种方式进行哈希处理。
我不知道这是否是最合适的解决方案,但我最终通过浏览器访问地址(https://apis.ankr.com/XXXX/YYYY/full/main)解决了这个问题,在Chrome上打开开发工具,并登录介绍我的证书。
然后我通过检查请求的 HEADER(在 Chrome 上,在 Network>therequest>Request Headers>authorization 中完成)获得了请求中发送的散列凭证。我只是 copy/pasted js 代码上的这个散列凭证并且它有效!