Maison > cadre php > PensezPHP > Explication détaillée de ThinkPHP6 combiné avec GuzzleHTTP pour envoyer des requêtes HTTP

Explication détaillée de ThinkPHP6 combiné avec GuzzleHTTP pour envoyer des requêtes HTTP

藏色散人
Libérer: 2021-05-17 09:08:41
avant
5226 Les gens l'ont consulté

La colonne tutorielle suivante de thinkphp vous présentera ThinkPHP6 combiné avec GuzzleHTTP pour envoyer des requêtes HTTP. J'espère que cela sera utile aux amis dans le besoin !

Arrière-plan

Le programme de compte public thinkphp WeChat appelle activement l'interface WeChat et a besoin d'un access_token, et Vous devez envoyer de manière proactive une demande pour configurer le menu du compte officiel.

Pourquoi choisir GuzzleHTTP

Guzzle est un client HTTP PHP qui permet d'envoyer facilement des requêtes et de s'intégrer dans nos services WEB.

接口简单:构建查询语句、POST请求、分流上传下载大文件、使用HTTP cookies、上传JSON数据等等。
发送同步或异步的请求均使用相同的接口。
使用PSR-7接口来请求、响应、分流,允许你使用其他兼容的PSR-7类库与Guzzle共同开发。
抽象了底层的HTTP传输,允许你改变环境以及其他的代码,如:对cURL与PHP的流或socket并非重度依赖,非阻塞事件循环。
中间件系统允许你创建构成客户端行为。
Copier après la connexion

Documentation chinoise de Guzzle : https://guzzle-cn.readthedocs.io/zh_CN/latest/

Installer GuzzleHTTP

1 Installer composer
Parce que thinkphp6 utilise composer pour install , donc composer a été installé dans mon environnement et la méthode d'installation de composer est ignorée ici. Veuillez utiliser Baidu si nécessaire.

2. Installez Guzzle

Entrez dans le répertoire du projet tp

 cd /Applications/XAMPP/htdocs/tp1/tp
Copier après la connexion

Exécutez la commande d'installation

composer require guzzlehttp/guzzle
Copier après la connexion
3 Ouvrez l'exemple extension=php_openssl.dll

send http get dans le php. ini document Code

1. Introduisez GuzzleHttp

use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;
Copier après la connexion

2 dans le contrôleur L'exemple de programme suivant utilise HTTP GET dans tp6 pour obtenir le jeton d'accès de la plateforme publique WeChat

       //微信公众平台获取access token url
        $url = 'https://api.weixin.qq.com/cgi-bin/token?';
       //获取access token时需要携带的参数
        $params = array(
            'grant_type' => 'client_credential',
            'appid' => config('app.WECHAT.APPID'),
            'secret' => config('app.WECHAT.SECRET')
        );
        $resp = null;
        try {
           //使用GuzzleHTTP发送get请求
            $client = new Client();
            $resp = $client->request('GET', $url.http_build_query($params));
        } catch (GuzzleException $e){
            print($e);
        }

        if (empty($resp)) {
            return null;
        }
        //获取微信公众平台的response
        $data = json_decode($resp->getBody(), true);
        if (isset($data['errcode']) && $data['errcode'] != 0) {
            throw new \think\Exception ($data['errmsg'], $data['errcode']);
        }
Copier après la connexion
Envoyer un exemple de code http Post

est très simple à utiliser, il suffit de regarder le code.

    /**
     * 创建自定义菜单
     */
    public function menu()
    {
        require __DIR__ . '/../../vendor/autoload.php';
        //构建HTTP post JSON body数据
        $data = array(
            'button' => array(
                array(
                    'type' => 'click',
                    'name' => '主菜单1',
                    'sub_button' => array(
                        array(
                            'type' => 'click',
                            'name' => '子菜单1',
                            'key' => self::MENU_MAIN_1_CHILD_1
                        ),
                        array(
                            'type' => 'view',
                            'name' => '百度',
                            'url' => 'https://www.baidu.com'
                        )
                    )
                ),
                array(
                    'type' => 'click',
                    'name' => '主菜单2',
                    'sub_button' => array(
                        array(
                            'type' => 'click',
                            'name' => '子菜单1',
                            'key' => self::MENU_MAIN_2_CHILD_1
                        ),
                        array(
                            'type' => 'view',
                            'name' => 'QQ',
                            'url' => 'http://www.qq.com'
                        )
                    )
                ),
                array(
                    'type' => 'click',
                    'name' => '主菜单3',
                    'key' => self::MENU_MAIN_3
                )
            )
        );
        //构造请求json body和header数据
        $options = json_encode($data, JSON_UNESCAPED_UNICODE);
        $jsonData = [
            'body' => $options,
            'headers' => ['content-type' => 'application/json']
        ];

        $resp = null;
        try {
            $client = new Client();
            //生成微信公众号菜单需要调用的微信接口url
            $url = 'https://api.weixin.qq.com/cgi-bin/menu/create?access_token=' . $this->_getAccessToken();
            //发送http post请求
            $resp = $client->post($url, $jsonData);
        } catch (GuzzleException $e){
            print($e);
        }


        if (empty($resp)) {
            return null;
        }

        echo $resp->getBody();
    }
Copier après la connexion
Recommandations associées :

Les 10 derniers didacticiels vidéo thinkphp

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal