简介
在开发需要用到三方网络服务的应用程序时,网络问题经常出现,因此记录程序访问日志是非常重要的。Guzzle提供了不少插件来实现日志记录功能,本例中以 monolog为例。
修改我们的composer.json文件,require部分添加如下一行:
Guzzle是PHP中的一个独立HTTP客户端。可以通过composer来安装,composer.json文件内容如下所示:
{
"name":"jd/guzzle demo",
"authors":[
{
"name":"Eddy",
"email":"eddy@rrgod.com"
}
],
"require":{
"guzzle/guzzle":"~3.7"
}
}
保存文件,运行composer install命令,Guzzle库安装完成,OK~
入门基础
<?php
require_once 'vendor/autoload.php';
use Guzzle\Http\Client;
use Guzzle\Http\EntityBody;
use Guzzle\Http\Message\Request;
use Guzzle\Http\Message\Response;
$client = new Client('http://qrng.anu.edu.au/');
$request = $client->get('/API/jsonI.php?length=10&type=uint8');
$response = $request->send();
$body = $response->getBody(true);
echo $body;
实例化一个Client,构造函数的参数是我们要访问的地址。随后调用Client的get方法发送get请求,当然也可以调用post等其它http方法发送http请求,并返回一个Request对象。紧接着调用Request对象的send方法发送请求并返回一个response对象。最后,我们调用response对象的getBody方法接收请求结果。
处理路径和URL参数
上面的代码例子请求路径和参数是直接放在url中的,我们也可以自己构造对应的参数,代码如下所示:
$request = $client->createRequest();
$request->setPath('/API/jsonI.php');
$request->getQuery()->
set('length',10)
->set('type','uint8');
日志记录
在开发需要用到三方网络服务的应用程序时,网络问题经常出现,因此记录程序访问日志是非常重要的。Guzzle提供了不少插件来实现日志记录功能,本例中以 monolog为例。
修改我们的composer.json文件,require部分添加如下一行:
"monolog/monolog": "1.6.0"
运行composer update命令,安装monolog。修改下我们的代码,以此来让Guzzle来用monolog来记录我们的请求和返回日志信息。
<?php
require_once 'vendor/autoload.php';
use Guzzle\Http\Client;
use Guzzle\Http\EntityBody;
use Guzzle\Http\Message\Request;
use Guzzle\Http\Message\Response;
use Guzzle\Log\MessageFormatter;
use Guzzle\Log\MonologLogAdapter;
use Guzzle\Plugin\Log\LogPlugin;
use Monolog\Handler\StreamHandler;
use Monolog\logger;
$logger = new Logger('client');
$logger->pushHandler(new StreamHandler('guzzle.log'));
$logAdapter = new MonologLogAdapter($logger);
$LogPlugin = new LogPlugin($logAdapter,MessageFormatter::DEBUG_FORMAT);//具体记录日志类型可参考Guzzle文档
$client = new Client('http://qrng.anu.edu.au/');
$client->addSubscriber($LogPlugin);
$request = $client->get('/API/jsonI.php?length=10&type=uint8');
$response = $request->send();
$body = $response->getBody(true);
echo $body;
?>
参考