[ laravel爬虫实战--基础篇 ] guzzle发送异步请求
Song •
5403 次浏览 •
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中distinct()的使用方法与去重 2017-09-11
-
Laravel将view缓存为静态html,laravel页面静态缓存 2021-10-09
-
[ laravel爬虫实战--基础篇 ] guzzle描述与安装 2017-11-01
-
[ 配置教程 ] 在ubuntu16.04中部署LNMP环境(php7+maridb且开启maridb远程以及nginx多域名访问 )并配置laravel环境 2017-07-18
-
mysql如何给运营人员添加只有查询权限的账号 2024-12-02
热门文章
-
mysql如何给运营人员添加只有查询权限的账号 2024-12-02
-
Mac 安装mysql并且配置密码 2024-11-20
-
阿里云不同账号(跨账号)ECS服务器同地域如何实现免费内网互通? 2024-11-12
-
electron安装使用better-sqlite3并解决NODE_MODULE_VERSION xxx. This version of Node.js requires 2024-11-06
-
Zerotier+Moon+Nginx实现内网穿透搭建网站 2024-08-23
花生壳绑定ubuntu服务器?