Guzzle是一个PHP的HTTP客户端,可用来发送请求,并集成到WEB服务上,它有以下特点:
1.接口简单:可构建查询语句,POST请求,分流上传下载大文件,使用HTTP cookies,上传JSON数据等。
2.可使用相同的接口来发送同步或异步请求。
3.可使用PSR-7接口来请求,响应,分流,允许使用其他兼容的PSR-7类库与Guzzle共同开发。
4.抽象了底层的HTTP传输,允许改变环境以及其他的代码,比如:对cURL与PHP的流或socket并非重度依赖,非阻塞事件循环。
5.中间件系统允许创建构成客户端行为。
第一,首先使用Composer来安装Guzzle,Composer下载地址,将其安装在5.5.0版本以上的php环境内,否则会报错,若使用phpStudy 2016的PHP+Apache+MySQL服务器环境搭建,则可直接在操作界面切换PHP版本,这里为5.5.38:
第二,之后,在phpStudy\WWW目录下,打开Powershell:
php D:\phpStudy\tools\composer\composer.phar require guzzlehttp/guzzle:~6.0
安装guzzlehttp/guzzle:~6.0,如下:
第三,安装完之后,在WWW主目录下会生成vendor目录以及composer.json文件,在WWW目录下创建一个get_eth_info.php文件来通过guzzle获取eth节点状态,前提是已在地址192.168.1.101开启远程访问节点:
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<?php
//===================================
// PHP 测试获取eth节点状态代码
//===================================
//-----------------------------------
// 获取地址192.168.1.101上节点所连接的节点数目信息
//-----------------------------------
/*
*使用第三方guzzle架构
*创建对象GuzzleHttp\Client
*获取地址192.168.1.101上节点连接的节点数信息
*/
require '/vendor/autoload.php';
use GuzzleHttp\guzzle;
$client = new GuzzleHttp\Client();
$opts = [
'json' => [
'jsonrpc' => '2.0',
'method' => 'net_peerCount',
'params' => [],
'id' => 1
]
];
$rsp = $client->post('192.168.1.101:8545', $opts);
#print("<pre>");
echo $rsp->getStatusCode(), "<br>";
echo $rsp->getBody() . PHP_EOL;
#print("</pre>");
?>
</body>
</html>
其中json参数参考网址,这里只实验net_peerCount方法,其他类似,结果如下:
返回结果为0x5,表示当前与192.168.1.101上eth节点相连的其他节点数为5个。
若显示报错如下:
{"code":-32700,"message":"json: cannot unmarshal string into Go value of type rpc.jsonRequest"}
表示$opts内的json请求格式出错,需重新检查一下。
参考网址