yii2框架-httpclient客户端

本文介绍了Yii2框架中的HttpClient组件,重点讲解了版本2.0.1的更新,特别是新增的beforeSend和afterSend监听事件,用于增强HTTP请求的控制。此外,还提到了如何设置返回内容格式和请求头信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在中国互联网中,BAT作为中国互联网的三座大山,很多创业者或者初创公司都表示BAT掌握着中国互联网的80%资源,面对着这种生态级的巨头的触角延伸,他们成功的机会能有多大呢!确实无可否认,BAT玩的现在都是生态,是触及到各个方面的,他们不断地投资或者并购初创企业,或者一些独角兽,说到底他们即是在相互竞争,也是在防守。他们的这个生态体量级,是他们十几年来的技术,文化,商业模式,以及政策,社会发展到一定时期的产物。BAT更多的是在移动互联网浪潮中引领者整个中国互联网的发展,因为创业公司或者独角兽很多的资本,人才,大部分还是来自BAT系,他们三者现在除了核心的业务自己掌握,其他的很多生态业务更多的是以投资或者合作伙伴的方式共存。

百度的核心业务除了搜索,现在是从人连接信息过度到人连接服务,目前还有o2o,百度金融,押注无人驾驶,人工智能,大数据。
阿里已经不但是一家电商企业,在金融,大娱乐文化,云计算,大数据,人工智能等已经是全面开花了。

腾讯的定位为“社交”,“连接器”,通过qq,微信两大移动应用,完善的用户账号体系,以游戏,广告,媒体,大数据,泛娱乐等触及到生活各个方面。


yii2的httpclients是一个模拟http协议的一个组件,封装好了http的请求方法,是一个友好,成熟的扩展。

httpclients的本版本是2.0.1,此次最大的改进是在 HTTP 请求时加入了 beforeSend 和 afterSend 监听事件:

use yii\httpclient\Client;
use yii\httpclient\Request;
use yii\httpclient\RequestEvent;
 
$client = new Client();
 
$request = $client->createRequest()
    ->setMethod('get')
    ->setUrl('http://api.domain.com')
    ->setData(['param' => 'value']);
 
// 发送前触发事件
$request->on(Request::EVENT_BEFORE_SEND, function (RequestEvent $event) {
    $data = $event->request->getData();
 
    $signature = md5(http_build_query($data));
    $data['signature'] = $signature;
 
    $event->request->setData($data);
});
 
// 发送后响应数据
$request->on(Request::EVENT_AFTER_SEND, function (RequestEvent $event) {
    $data = $event->response->getData();
 
    $data['content'] = base64_decode($data['encoded_content']);
 
    $event->response->setData($data);
});

//发送 
$response = $request->send();
(1)一些基本用法

use yii\httpclient\Client;

$client = new Client();
$response = $client->createRequest()
    ->setMethod('post')
    ->setUrl('http://example.com/api/1.0/users')
    ->setData(['name' => 'John Doe', 'email' => 'johndoe@example.com'])
    ->send();
if ($response->isOk) {
    $newUserId = $response->data['id'];
}

$client->createRequest()

这个方法是创建request的实例,然后执行链试操作方法,最后返回一个响应对象$response
具体的方法可以认真看看yii\httpclient\Request类、yii\httpclient\Message类、yii\httpclient\Response类
(2)单独使用client类,比较适合用于restful的请求

use yii\httpclient\Client;

$client = new Client(['baseUrl' => 'http://example.com/api/1.0']);

$newUserResponse = $client->post('users', ['name' => 'John Doe', 'email' => 'johndoe@example.com'])->send();

$articleResponse = $client->get('articles', ['name' => 'Yii 2.0'])->send();

$client->post('subscriptions', ['user_id' => $newUserResponse->data['id'], 'article_id' => $articleResponse->data['id']])->send();
这个yii\httpclient\Client类定义了http的基本方法,可以具体看看,它定义一个基本的url.

(3)设置返回对象的内容格式

yii\httpclient\Client::FORMAT_JSON - JSON format
yii\httpclient\Client::FORMAT_URLENCODED - urlencoded by RFC1738 query string
yii\httpclient\Client::FORMAT_RAW_URLENCODED - urlencoded by PHP_QUERY_RFC3986 query string
yii\httpclient\Client::FORMAT_XML - XML format

use yii\httpclient\Client;

$client = new Client(['baseUrl' => 'http://example.com/api/1.0']);
$response = $client->createRequest()
    ->setFormat(Client::FORMAT_JSON)
    ->setUrl('articles/search')
    ->setData([
        'query_string' => 'Yii',
        'filter' => [
            'date' => ['>' => '2015-08-01']
        ],
    ])
    ->send();
那么我们可以获取内容:

$responseData = $response->getData(); // get all articles
count($response->data) // count articles
$article = $response->data[0] // get first article
在这里气门需要注意一点的是,因为我们的如果用yii2的restful作为接口,一般数据返回的格式我们也是在服务端定义好的,一般是json,所以如果在这个client的reponse可以无需再设置setFormat(Client::FORMAT_JSON)等。

(4)设置请求头信息

use yii\httpclient\Client;

$client = new Client(['baseUrl' => 'http://example.com/api/1.0']);
$request = $client->createRequest()
    ->setHeaders(['content-type' => 'application/json'])
    ->addHeaders(['user-agent' => 'My User Agent']);

$request->getHeaders()->add('accept-language', 'en-US;en');
$request->headers->set('user-agent', 'User agent override');
在响应对象中可以获取header信息

$response = $request->send();
echo $response->getHeaders()->get('content-type');
echo $response->headers->get('content-encoding');






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值