使用 PHP curl 获取 jsonRPC 数据,
Get jsonRPC data with PHP curl,
在我的 vps 上设置一个 JSON-RPC,我想通过 PHP CURL 在我的网站上进行连接,执行基本请求并寻找 getmasternodecount。
之前尝试过很多脚本和库,但是 none 似乎对我有效。现在我试着写一些基本的 php 代码,但这个技能不是我最好的。
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
function coinFunction () {
$feed = 'http://user:pass@ip/';
$post_string = '{"method": "getmasternodecount", "params": []}';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $feed);
curl_setopt($ch, CURLOPT_PORT, port);
curl_setopt($ch, CURLOPT_USERPWD, "user:pass");
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
//curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/stratum', 'Content-length: '.strlen($post_string)));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json', 'Content-length: '.strlen($post_string)));
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
$data = coinFunction();
var_dump($data);
echo $data;
?>
然后给我这个数据转储:
string(127) "HTTP/1.1 403 Forbidden Date: Sun, 24 May 2020 00:06:21 GMT Content-Length: 0 Content-Type: text/html; charset=ISO-8859-1 " HTTP/1.1 403 禁止日期:2020 年 5 月 24 日星期日 00:06:21 GMT 内容长度:0 内容类型:text/html;字符集=ISO-8859-1
当我删除所有 var 转储信息等时,它会向我发送一个白页,有时还会发送 NULL。
此致,
让我们处理第一个片段。由于这是一个 POST 请求,因此 file_get_contents
在这里显得格格不入。添加以下 setopt 行:
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HEADER, 0);
没有这些,curl_exec
的结果将不包含返回的内容。
还建议指定请求的 Content-Type
(即 application/json
)。即使没有,服务器也可能会处理它,但以防万一:
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Content-Type:application/json'));
身份验证是另一回事。 URL 中的凭据建议使用 Basic,但服务器可能期望其他方式...请参阅 CURLOPT_HTTPAUTH
。
在我的 vps 上设置一个 JSON-RPC,我想通过 PHP CURL 在我的网站上进行连接,执行基本请求并寻找 getmasternodecount。
之前尝试过很多脚本和库,但是 none 似乎对我有效。现在我试着写一些基本的 php 代码,但这个技能不是我最好的。
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
function coinFunction () {
$feed = 'http://user:pass@ip/';
$post_string = '{"method": "getmasternodecount", "params": []}';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $feed);
curl_setopt($ch, CURLOPT_PORT, port);
curl_setopt($ch, CURLOPT_USERPWD, "user:pass");
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
//curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/stratum', 'Content-length: '.strlen($post_string)));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json', 'Content-length: '.strlen($post_string)));
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
$data = coinFunction();
var_dump($data);
echo $data;
?>
然后给我这个数据转储: string(127) "HTTP/1.1 403 Forbidden Date: Sun, 24 May 2020 00:06:21 GMT Content-Length: 0 Content-Type: text/html; charset=ISO-8859-1 " HTTP/1.1 403 禁止日期:2020 年 5 月 24 日星期日 00:06:21 GMT 内容长度:0 内容类型:text/html;字符集=ISO-8859-1
当我删除所有 var 转储信息等时,它会向我发送一个白页,有时还会发送 NULL。
此致,
让我们处理第一个片段。由于这是一个 POST 请求,因此 file_get_contents
在这里显得格格不入。添加以下 setopt 行:
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HEADER, 0);
没有这些,curl_exec
的结果将不包含返回的内容。
还建议指定请求的 Content-Type
(即 application/json
)。即使没有,服务器也可能会处理它,但以防万一:
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Content-Type:application/json'));
身份验证是另一回事。 URL 中的凭据建议使用 Basic,但服务器可能期望其他方式...请参阅 CURLOPT_HTTPAUTH
。