GuzzleHttp的使用

一、背景

作爲經常需要使用到的API,項目可以添加GuzzleHttp擴展來使用,方便,快捷,全面;

這次我們項目開發使用的是laravel5.8,那麼對於接口數據均是採用GuzzleHttp來獲取的,文檔有較爲全面的使用介紹,本仙女這就只總結自己能用到的喲

二、封裝使用

/**
     * 請求接口,獲取e信使用戶需要完成的閱讀任務
     * @param string $post 請求方式
     * @param array $data 請求數據
     * @param string $sRequUrl 請求接口地址
     * @return array
     *
     * @throws GuzzleException
     */
    public function sendRequest($post = 'GET', $sRequUrl, $data = [])
    {
        if (config('app.env') != 'production') {
            return false;
        }

        //區分請求方式
        $aParams =[];
        if($post == 'GET' ){
            $aParams = ['query'=>$data];
        }else if($post == 'POST' ){
            $aParams = ['form_params'=>$data];
        }

        try {
            $httpClient = $httpClient = new Client([
                'timeout' => 60
            ]);
            $sHttpRes = $httpClient->request($post, $sRequUrl, $aParams)->getBody()->getContents();
            return json_decode($sHttpRes, true);
        } catch (\Exception $exception) {
            info('調用接口發生錯誤--------------' . $sRequUrl);
            info($exception);
            info('------------------------');
        }
        return false;
    }

這裏是一個封裝好的方法,但僅僅是對get和post做了處理,接下來是使用步驟的描述;

2.1 Making a Request

首先創建一個GuzzleHttp\ClientInterface 對象,用來發送請求;

 use GuzzleHttp\Client;
$httpClient = new Client([
    // Base URI is used with relative requests
    'base_uri' => 'http://httpbin.org',
    // You can set any number of default request options.
    'timeout'  => 2.0,
]);
 

因爲我這個方法是用戶承接不同網站的數據,數據在創建對象的時候並沒有初始化一個base_uri,

2.2 Sending Requests

$response = $client->get('http://httpbin.org/get');
$response = $client->post('http://httpbin.org/post');
$client->request('GET', 'http://httpbin.org', ['query' => 'foo=bar']);

等形式,沒有參數時,倒是不用操作,但是接口參數是一般都有的,所以當你使用get或者post請求方式的時候就要做一個區分處理了,對於get:參數放在query的數組裏面;對於post:參數是放在頭部參數form_params數組裏的;

2.3 Using Reponses

請求發送以後,就是響應的接收處理啦。

$ body  =  $ response - > getBody (); 

這是獲取響應Reponse的整體,獲取響應的內容則是$body->getContents();
至此大致的邏輯就已經可以了。

2.4 異步請求的封裝

/**
     * 請求接口,獲取e信使用戶需要完成的閱讀任務
     * @param string $post 請求方式
     * @param string $sRequUrl 請求接口地址
     * @param array $data 請求數據
     * @return bool
     */
    public function sendAsyncRequest($post = 'GET', $sRequUrl, $data = [])
    {
        try {
            $httpClient = new Client([
                'timeout' => 60
            ]);
            $httpClient->requestAsync($post, $sRequUrl, ['query' => $data])
                ->then(
                    function (ResponseInterface $res) {
                        info($res->getBody()->getContents());
                        return json_decode($res->getBody()->getContents(), true);
                    },
                    function (RequestException $e) {
                        info('調用接口發生錯誤--------------');
                        info($e->getMessage());
                    }
                )->wait();
        } catch (\Exception $exception) {
            info('調用接口發生錯誤--------------' . $sRequUrl);
            info($exception);
            info('------------------------');
        }
        return false;
    }

這都是本人正在使用的接口,希望分享出來有幫助到你!

三、寫在最後

這個用起來還是很方便的,大家可以再深入研究一下,這裏是GuzzleHttp文檔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章