本文适合寻找PHP HTTP客户端库,或者对于Guzzle的使用和实现原理比较感兴趣的同学阅读,需要具备一定的PHP基础知识。
一、背景
在PHP后台开发过程中,经常会遇到模块间需要通过HTTP通信的情形。PHP语言本身只提供了socket操作的接口,并未提供HTTP相关操作的接口。许多现有的实现采用curl扩展充当HTTP Client与HTTP Server通信,但仍需自己封装curl的接口。有鉴于此,本文介绍一款流行的PHP HTTP Client客户端---Guzzle(https://github.com/guzzle/guzzle/)的用法,深入分析其底层实现原理。
二、Guzzle用法
例如使用Guzzle访问http://www.baidu.com的代码:
<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'http://www.baidu.com', [
"timeout" => 3000
]);
echo $response->getStatusCode(), "\n";
echo $response->getBody();
接口封装是不是十分简单?只需要关心请求方法,目标url和请求的选项即可快速上手。同时,Guzzle还支持异步请求方式:
<?php
use GuzzleHttp\Exception\RequestException;
use Psr\Http\Message\ResponseInterface;
$client = new \GuzzleHttp\Client();
$promise = $client->requestAsync('GET', 'http://www.baidu.com');
$promise->then(
function (ResponseInterface $res) {
echo $res->getStatusCode() . "\n";
echo $res->getBody();
return $res;
},
function (RequestException $e) {
echo $e->getMessage() . "\n";
echo $e->getRequest()->getMethod();
}
)->wait();
</