yii2 httpClient的用法

yii2 httpClient的用法示例:

<?php
/*
 * @Purpose : yii2 httpClient 请求示例
 * @Author  : Chrdai
 * @Time    : 2018-05-09
 * */

use Yii;
use yii\base\Controller;
use yii\helpers\Json;
use yii\httpclient\Client;


class TestController extends Controller
{
    //use ControllerTrait;

    /*
     * @Perpose 定义接口请求地址
     */
    public $url = 'http://192.168.18.100';

    /**
     * @var Client
     */
    public $httpClient = null;

    /*
     * @Perpose 错误信息
     */
    public $errMsg = '';

    /*
     * @Perpose 初始化的时候设置好接口请求地址
     */
    public function init()
    {
        parent::init();
        $this->httpClient = new Client([
            'baseUrl' => $this->url
        ]);
    }

    /**
     * @Perpose :   GET请求示例
     * http-client 接口文档:https://www.yiiframework.com/extension/yiisoft/yii2-httpclient/doc/guide/2.0/en/installation
     * @return mixed
     * http://192.168.18.100/api/test/index
     */
    public function actionIndex()
    {
        $params = 'username=admin&password=21232f297a57a5a743894a0e4a801fc3';
        $res = $this->httpClient->get('api/auth/login?' . $params )
            ->setOptions([
                CURLOPT_CONNECTTIMEOUT => 5, // connection timeout
                CURLOPT_TIMEOUT => 10, // data receiving timeout
            ])
            ->send();
        echo "<pre>";
        //var_dump($res);
        var_dump($res->isOk);
        var_dump($res->data);
        if($res->isOk && is_array($res->data)){
            if($res->data['errno'] == 0){
                return Json::encode($res->data['result']['access_token']);
            }
        }else{
            $this->errMsg = $res->data['errmsg'];
            throw new \Exception($this->errMsg);
        }
        return false;
    }

    /**
     * @Perpose :   POST请求示例
     */
    public function actionGetOrder()
    {
        $data = [
            'user_id' => '1',
            'dept_id' => '2',
        ];
        $params =  Json::encode($data);
        $res = $this->httpClient->post('/api/order?access_token=c834472d8193946f6465c9264b9f64d0',$params,['Content-Type'=>'application/json'])
            ->setOptions([
                CURLOPT_CONNECTTIMEOUT => 5, // connection timeout
                CURLOPT_TIMEOUT => 10, // data receiving timeout
            ])
            ->send();
        if ($res->isOk && is_array($res->data)) {
            if ($res->data['errno'] == 0) {
                return Json::encode($res->data['result']);
            } else {
                $this->errMsg = $res->data['errmsg'];
                throw new \Exception($this->errMsg);
            }
        }
        return false;
    }

    public function actionGetOrder1()
    {
        $data = [
            'user_id' => '1',
            'dept_id' => '2',
        ];
        $token['access_token'] = trim($this->actionIndex(),'"') ;
        $url = strpos($this->url,'?') ? $this->url . '/api/order&' . http_build_query($token) : $this->url . '/api/just-ari?' . http_build_query($token);
        //var_dump($url);die;
        $res = $this->httpClient->createRequest()
            ->setMethod('POST') // 请求方式
            ->setUrl($url)      // 请求地址
            ->setData($data)    //数据传数组
            ->setHeaders(['Content-Type'=>'application/json']) //header
            ->setFormat(Client::FORMAT_JSON) //提交的数据的格式
            ->setOptions([
                CURLOPT_CONNECTTIMEOUT => 5, // connection timeout
                CURLOPT_TIMEOUT => 10,       // data receiving timeout
            ])
            ->send();
        if ($res->isOk && is_array($res->data)) {
            if ($res->data['errno'] == 0) {
                return Json::encode($res->data['result']);
            } else {
                $this->errMsg = $res->data['errmsg'];
                throw new \Exception($this->errMsg);
            }
        }
        return false;;
    }
}

·

posted @ 2019-03-28 09:28  Chrdai  阅读(4602)  评论(0编辑  收藏  举报