我的计算机上全新安装了 IPFS 守护进程:
ipfs init
ipfs daemon
运行以下命令时,输出似乎正确:
$ ipfs 路由 findprovs QmUZzfuaCcPSXgADUnkF1GKBsDRUxxxxxxxxx
12D3KooWLJBTtGHSbeqHSEkAo4jTni1PBrtRktV2a85yKxxxxxx
按如下方式请求 RPC API 时(应提供与 CLI 相同的输入):
curl -X POST "http://127.0.0.1:5001/api/v0/routing/findprovs?arg=QmUZzfuaCcPSXgADUnkF1GKBsDRUxxxxxxxxx"
我得到的响应包含多个 JSON 对象(100+),用
{"Extra":"","ID":"12D3KooWAH9RHKrbpS1nZC7Wos91y8dD4HwN5Wq2JmHjxxxxxxx","Responses":null,"Type":7}
{"Extra":"","ID":"12D3KooWHWEKWG6Mh4ZgoCmxhP2uhyyVdBJGt388LMLXQQxxxxxx","Responses":null,"Type":0}
....
如何使用 RPC API 获得与 CLI 相同的结果?
经过进一步调查和确认后,我找到了一个临时解决方案(这确实不理想)这个github帖子
返回的带有
Type=4
的提供商是 CLI 识别的提供商。这是一个 ruby 示例,用于从响应中提取这些内容(将响应视为纯文本而不是 Json 后):
response.body.each_line
.map{ |line| JSON.parse(line)}
.filter{ |line| line['Type'] == 4}
.collect{ |line| line['Responses']}
.map{ |line| line[0]}
.map{ |line| line['ID'] }
# ["QmQzqxhK82kAmKvARFZSkUVS6fo9sySaiogAnx5Enxxxx",
# "12D3KooWFzZYEChh6Dsy4jHyTopK42oRrk41WVfnpMG5rxxxxxx",