TP5.1 简单利用CURL实现请求

首先封装一个 CURL 方法,可以不用理解代码

class MyCurl extends Base
{
    /**
     * http请求
     *
     * @param $url     //请求地址
     * @param $params  //链接后拼接的参数数组
     * @param $method  //get/post
     * @param $header  //请求头数组
     */
    function httpCurl($url, $params, $method = 'GET', $header = array(), $multi = false)
    {
        date_default_timezone_set('PRC');  //设置默认时区
        $opts = array(                                     //请求参数
            CURLOPT_TIMEOUT => 30,
            CURLOPT_RETURNTRANSFER => 1,       //将curl_exec()获取的信息以文件流的形式返回
            CURLOPT_SSL_VERIFYPEER => false,   //不对认证证书来源的检查
            CURLOPT_SSL_VERIFYHOST => false,   //不从证书中检查SSL加密算法是否存在
            CURLOPT_HTTPHEADER => $header,     //Content-Type类型
            CURLOPT_COOKIESESSION => true,
            CURLOPT_FOLLOWLOCATION => 1,      // 使用自动跳转
            CURLOPT_COOKIE => session_name() . '=' . session_id(),
        );

        /* 根据请求类型设置特定参数 */
        switch (strtoupper($method)) {
            case 'GET':
                // 链接后拼接参数 如xxx.com?key = value & key2=value
                $opts[CURLOPT_URL] = $url . '?' . http_build_query($params);//将数组变成key=value&key2=value
                break;
            case 'POST':                //判断是否传输文件
                $params = $multi ? $params : http_build_query($params); //同上
                $opts[CURLOPT_URL] = $url;
                $opts[CURLOPT_POST] = 1;
                $opts[CURLOPT_POSTFIELDS] = $params;
                break;
            default:
                throw new Exception('不支持的请求方式!');
        }

        /* 初始化并执行curl请求 */
        $ch = curl_init();
        curl_setopt_array($ch, $opts); // 数组形式设置URL和其他参数
        $data = curl_exec($ch);        // URL抓取并把它传递给浏览器
        $error = curl_error($ch);
        curl_close($ch);
        if ($error)
            return $this->create('','错误信息:'.$error,400);
        $data = json_decode($data, true);
        return $data;
    }


    /**
     * xml/json数据的POST请求
     *
     * @param $url     //请求地址
     * @param $xmlData  //xml 或 json数据
     */
    public function PostData($url,$xmlData)
    {
        $curl = curl_init();
        $param[CURLOPT_URL] = $url;
        $param[CURLOPT_HEADER] = false;
        $param[CURLOPT_RETURNTRANSFER] = true;
        $param[CURLOPT_FOLLOWLOCATION] = true;
        $param[CURLOPT_POST] = true;
        $param[CURLOPT_POSTFIELDS] = $xmlData;
        $param[CURLOPT_SSL_VERIFYPEER] = false;
        $param[CURLOPT_SSL_VERIFYHOST] = false;
        curl_setopt_array($curl,$param); //传参数
        $data = curl_exec($curl);       //执行命令
        curl_close($curl);
        return $data;
    }
}

 

测试 微信小程序通过code 获取 openId 的过程

public function test(Request $request)
    {
        $url = App::config('xcxKey_url'); //请求地址

        //从微信服务器换取 openid 传递的参数 AppId、AppSecret、Code、grant_type、connect_redirect
        $params['appid'] = App::config('xcx_appid');
        $params['secret'] = App::config('xcx_secret');
        $params['js_code'] = $request::param('code');
        $params['grant_type'] = 'authorization_code';  
        $params['connect_redirect'] = 1;                

        return (new MyCurl)->httpCurl($url, $params, 'POST');
    }

 

结果:

 

posted @ 2021-06-24 09:56  jaychou、  阅读(2115)  评论(0编辑  收藏  举报