curl get请求接口

控制器进行请求

//        请求的网址
        $url='https://restapi.amap.com/v3/geocode/geo';
//        请求的参数
        $data=[
            'address'=>$address,
            'output'=>'JSON' ,
            'key'=>'57f43caedd2e585c74778b11238f721d'
        ];
//        调用
        $res=Curl::get($url,$data);
        print_r($res['geocodes'][0]);

封装get 请求(注销的是原代吗,请求到的是一个string)所以这里我接入了一个菜鸟教程中的curl请求

https://www.runoob.com/php/php-ref-curl.html

class Curl
{
    /**
     * @brief                  get请求
     * @param $url             请求的url
     * @param array $param     请求的参数
     * @param int $timeout     超时时间
     * @param int $log       是否启用日志
     * @return mixed
     */
    public static function get($url, $param=array(), $timeout=10, $log=1)
    {
//将参数进行合并
        if (is_array($param)) {
            $url = $url . '?' . http_build_query($param);
        }
        $headerArray =array("Content-type:application/json;","Accept:application/json");
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch,CURLOPT_HTTPHEADER,$headerArray);
        $output = curl_exec($ch);
        curl_close($ch);
        $output = json_decode($output,true);
        return $output;
        
//        curl_setopt($ch, CURLOPT_URL, $url);
//        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
//        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
//        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//        curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); // 允许 cURL 函数执行的最长秒数
//        $data = curl_exec($ch);
//        if ($log) {
//            $data .= "\r\n";
//            $data .= self::logInfo($ch, $param, $data);
//        }
//        curl_close($ch);
//        $output = json_decode($data,true);
////       数据返回
//        return $output;
    }

    /**
     * @brief                   post请求
     * @param $url              请求的url地址
     * @param array $param      请求的参数
     * @param int $log          是否启用日志
     * @return mixed
     */
    public static function post($url, $param=array(), $header=array(), $timeout=10, $log=1)
    {
        $ch = curl_init();
        if (is_array($param)) {
            $urlparam = http_build_query($param);
        } else if (is_string($param)) { //json字符串
            $urlparam = $param;
        }
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); //设置超时时间
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //返回原生的(Raw)输出
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch, CURLOPT_POST, 1); //POST
        curl_setopt($ch, CURLOPT_POSTFIELDS, $urlparam); //post数据
        if ($header) {
            curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
        }
        $data = curl_exec($ch);
        if ($log) {
            $data .= "\r\n";
            $data .= self::logInfo($ch, $param, $data);
        }

        curl_close($ch);
        return $data;
    }


    /**
     * 请求信息记录日志
     * @param $ch       curl句柄
     * @param $request  请求参数
     * @param $response 响应结果
     */
    private static function logInfo($ch, $request, $response)
    {
        $info = curl_getinfo($ch);
        $resultFormat =  "耗时:[%s] 返回状态:[%s] 请求的url[%s] 请求参数:[%s] 响应结果:[%s] 大小:[%s]kb 速度:[%s]kb/s";
        $resultLogMsg =  sprintf($resultFormat, $info['total_time'], $info['http_code'], $info['url'], var_export($request,true),var_export($response,true), $info['size_download']/1024, $info['speed_download']/1024);
        return $resultLogMsg;
    }

get 请求效果图

 

posted @ 2022-03-30 11:10  王越666  阅读(1258)  评论(0编辑  收藏  举报