PHP HTTP 客户端 - Guzzle

Eddy 发布于2014-1-16 10:34:57 分类: 技术心得 已浏览loading 网友评论0条 我要评论

简介

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;
 ?>

参考

Guzzle文档
Guzzle GitHub

已经有(0)位网友发表了评论,你也评一评吧!
原创文章如转载,请注明:转载自Eddy Blog
原文地址:http://www.rrgod.com/technique/895.html     欢迎订阅Eddy Blog

记住我的信息,下次不用再输入 欢迎给Eddy Blog留言