Estoy tratando de almacenar datos en ipfs a través de PHP, uso curl para comunicarme con API, funciona bien en mi nodo local, pero quiero usar un nodo externo de infura.io
pero por alguna razón, ipfs.infura.io rechaza mi conexión a través de php, incluso un comando simple como... Lo probé en mi localhost, así como en un par de servidores
aquí hay un punto final simple que puede abrir en el navegador y obtener el resultado
https://ipfs.infura.io:5001/api/v0/pin/add?arg=QmeGAVddnBSnKc1DLE7DLV9uuTqo5F7QbaveTjr45JUdQn
pero cuando trato de abrirlo a través de php obtengo
No se pudo conectar con ipfs.infura. puerto io 5001: conexión rechazada
o cuando se usa otro método como file_get_contents
file_get_contents(ipfs.infura.io:5001/api/v0/pin/add?arg=QmeGAVddnBSnKc1DLE7DLV9uuTqo5F7QbaveTjr45JUdQn): error al abrir la transmisión: conexión rechazada
Lo probé en el host local y en varios servidores, obtengo el mismo resultado incluso a través de la línea de comando ssh
¿alguna idea de por qué sucede esto?
aquí hay una versión simplificada n de mi código
$curl = curl_init(); curl_setopt($curl, CURLOPT_URL,"https://ipfs.infura.io:5001/api/v0/pin/add?arg=QmeGAVddnBSnKc1DLE7DLV9uuTqo5F7QbaveTjr45JUdQn"); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($curl, CURLOPT_FAILONERROR, true); $res = curl_exec($curl); if (curl_errno($curl)) { $error_msg = curl_error($curl); echo ('error ...'); echo ($error_msg); exit(); } curl_close($curl); echo($res);Para conectar el nodo ipfs , debe tener una biblioteca cliente. las bibliotecas de clientes dan formato automáticamente a las respuestas de la API para que coincidan con los tipos de datos utilizados en el lenguaje de programación y también manejan otras reglas de comunicación específicas.
en javascript,
import { create as ipfsHttpClient } from "ipfs-http-client"; const client = ipfsHttpClient("https://ipfs.infura.io:5001/api/v0");entonces este cliente hace la solicitud:
const added = await client.add(file, { progress: (prog) => console.log(`received:${prog}`),En php, puede usar este paquete: https://github.com/cloutier/php-ipfs-api
Marque esto para interactuar con infura: https://github.com/digitalkaoz/php-ipfs-api
Esta biblioteca requiere el módulo cURL:
$ sudo apt-get install php5-curl $ composer require cloutier/php-ipfs-api $ composer install $ export IPFS_API=http://somehost:5001/api/v0para usar este controlador desde la línea de comandos, simplemente proporcione la opción (o déjela fuera ya que es la predeterminada):
$ bin/php-ipfs version --driver=IPFS\\Driver\\Http $ bin/php-ipfs versionEl cliente de este controlador está destinado al uso programático:
$driver = $container[IPFS\Driver\Cli::class]; //$driver = $container[IPFS\Driver\Http::class]; $client = new IPFS\Client($driver); $response = $client->execute((new \IPFS\Api\Basics())->version()); var_dump($response);