thinkphp 框架封装curl请求

时间:2024-04-15 19:44:57

tp6 或者 tp8框架 在框架的app/common.php 文件里加一些方法就可以

app\common.php

在这个文件里加 以下代码 就可以实现基于 curl的请求方法  (记得要开启 php的curl扩展)

查看方法 cmd里输入 php -m


if (!function_exists('get')) {
    /**
     * 发送get请求
     * @param string $url 请求地址
     * @param array $params 请求参数
     * @param array $header 请求头
     * @return response|bool
     */
    function get($url, $params = [], $header = [])
    {
        $curl = curl_init();
        try
        {
            curl_setopt_array($curl, array(
              CURLOPT_URL => $url . '?' . http_build_query($params),
              CURLOPT_RETURNTRANSFER => true,
              CURLOPT_ENCODING => '',
              CURLOPT_MAXREDIRS => 10,
              CURLOPT_TIMEOUT => 0,
              CURLOPT_FOLLOWLOCATION => true,
              CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
              CURLOPT_CUSTOMREQUEST => 'GET',
              CURLOPT_HTTPHEADER => $header,
            ));

            $response = curl_exec($curl);
            curl_close($curl);

            if (empty($response))
            {
                return false;
            }
            $response1 = json_decode($response, true);
            if (empty($response1)) {
                return $response;
            }
            return $response1;
        } 
        catch(\Exception $e)
        {
            return false;
        }
        return false;
    }
}


if (!function_exists('post')) {
    /**
     * 发送post请求
     * @param string $url 请求地址
     * @param array $params 请求参数
     * @param array $header 请求头
     * @return response|bool
     */
    function post($url, $post, $params = array(), $header = [])
    {
        $curl = curl_init();
        try
        {
            curl_setopt_array($curl, array(
              CURLOPT_URL => $url . '?' . http_build_query($params),
              CURLOPT_RETURNTRANSFER => true,
              CURLOPT_ENCODING => '',
              CURLOPT_MAXREDIRS => 10,
              CURLOPT_TIMEOUT => 0,
              CURLOPT_FOLLOWLOCATION => true,
              CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
              CURLOPT_CUSTOMREQUEST => 'POST',
              CURLOPT_POSTFIELDS => $post,
              // CURLOPT_HTTPHEADER => array(
              //   'Content-Type: application/json'
              // ),
            ));
            if (is_string($post)) {
                curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
            }
            if (!empty($header)) {
                curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
            }
            $response = curl_exec($curl);
            curl_close($curl);
            if (empty($response))
            {
                return false;
            }
            $response = json_decode($response, true);
            return $response;
        } 
        catch(\Exception $e)
        {
            return false;
        }
        return false;
    }
}

在这里增加了两个方法 分别是 get 和 post 可以根据自己的需求 设置相应属性

使用的时候 在控制器里

// get 请求
get('http://www.xxx.com', ['key1' => 1, 'key2' => 2]);
// post 请求
post('http://www.xxx.com', ['key1' => 1, 'key2' => 2]);

就OK了