[ laravel爬虫实战--基础篇 ] guzzle发送异步请求
Song •
6022 次浏览 •
0个评论 •
2017年11月01日
同步请求是指,发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。异步请求是指,发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。
我们可以使用Client提供的方法来创建异步请求, 这样我们就不用等待返回就继续执行后续的操作:
$promise = $client->getAsync(http://httpbin.org/get);
$promise = $client->deleteAsync(http://httpbin.org/delete);
$promise = $client->headAsync(http://httpbin.org/get);
$promise = $client->optionsAsync(http://httpbin.org/get);
$promise = $client->patchAsync(http://httpbin.org/patch);
$promise = $client->postAsync(http://httpbin.org/post);
$promise = $client->putAsync(http://httpbin.org/put);
你也可以使用Client的sendAsync()和requestAsync()方法:
<?php
namespace App\Http\Controllers;
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request;
class TestController extends Controller
{
public function test()
{
$client = new Client([base_uri => https://baidu.com/]);
$headers = [X-Foo => Bar];
$body = Hello!;
$request = new Request(HEAD, http://baidu.com/, $headers, $body);
$promise = $client->requestAsync(GET, http://baidu.com/);
dd($request);
dd($promise);
}
}
这些方法返回了Request和Promise对象,该对象实现了由Guzzle promises library提供的Promises/A+ spec,这意味着你可以使用then()来调用返回值,成功使用Psr\Http\Message\ResponseInterface处理器,否则抛出一个异常。
<?php
namespace App\Http\Controllers;
use GuzzleHttp\Client;
use GuzzleHttp\Pool;
use GuzzleHttp\Psr7\Request;
use GuzzleHttp\Exception\ClientException;
use Illuminate\Console\Command;
use Psr\Http\Message\ResponseInterface;
use GuzzleHttp\Exception\RequestException;
class TestController extends Controller
{
public function test()
{
$client = new Client([base_uri => https://baidu.com/]);
$promise = $client->requestAsync(GET, https://baidu.com/);
$promise->then(
function (ResponseInterface $res) {
echo $res->getStatusCode() . "\n";
},
function (RequestException $e) {
echo $e->getMessage() . "\n";
echo $e->getRequest()->getMethod();
}
);
dd($promise);
}
}
更多相关好文
-
[ laravel爬虫实战--基础篇 ] guzzle的基本使用以及发送请求 2017-11-01 -
[ laravel爬虫实战--基础篇 ] guzzle描述与安装 2017-11-01 -
laravel修改分页样式并且把«和»改成上一页下一页 2017-10-21 -
Mac上通过brew安装lnmp (php7)开发环境并且搭建laravel项目 2017-10-21 -
laravel把实现数组和对象的相互转化以及toArray() 的用法 2017-10-20

花生壳绑定ubuntu服务器?