curl封装方法

    /**
     * 2018-08-02
     * 发送HTTP请求方法,目前只支持CURL发送请求
     * @param  string $url    请求URL
     * @param  array  $params 请求参数
     * @param  string $method 请求方法GET/POST
     * @param  array  $header 请求头参数,
     * @param  boolean $multi  是否上传文件
     * @param  string $auth_ip 所请求服务器Ip白名单,限制访问ip时使用
     * @return array  $data   响应数据
     */
    public static function http($url, $params=[], $method='GET', $headers=[], $multi=false, $auth_ip='')
    {
        set_time_limit(0);

        // 默认伪造User-Agent
        $header_arr=['User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'];

        // 拼接header参数
        foreach ($headers as $key => $value) {
        	$header_arr[]=$key.':'.$value;
        }

        $opts = [
            CURLOPT_TIMEOUT        => 300,
            CURLOPT_RETURNTRANSFER => 1,
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_SSL_VERIFYHOST => false,
            CURLOPT_HTTPHEADER     => $header_arr,
        ];

        // 如果对方需要限制访问ip的话
        if(!empty($auth_ip)){
	        $opts[CURLOPT_HTTPheaders][] = 'CLIENT-IP:'. $auth_ip;
	        $opts[CURLOPT_HTTPHEADER][] = 'X-FORWARDED-FOR:'. $auth_ip;
	        $opts[CURLOPT_HTTPHEADER][] = 'X-REAL-IP:'. $auth_ip;
        }

        /* 根据请求类型设置特定参数 */
        switch (strtoupper($method)) {
            case 'GET':
                $opts[CURLOPT_URL] = $params?$url.'?'.http_build_query($params):$url;
                break;
            case 'POST':
                //判断是否传输文件
                //$params = $multi ? $params : http_build_query($params);
                $opts[CURLOPT_URL] = $url;
                $opts[CURLOPT_POST] = 1;
                $opts[CURLOPT_POSTFIELDS] = $params;
                break;
            case 'PUT':
                $opts[CURLOPT_HTTPHEADER][] = 'Content-Type: application/json;';
                $opts[CURLOPT_URL] = $url;
                $opts[CURLOPT_CUSTOMREQUEST] = 'PUT';
                $opts[CURLOPT_POSTFIELDS] = json_encode($params);
                break;
            case 'DELETE':
                $opts[CURLOPT_URL] = $params?$url.'?'.http_build_query($params):$url;
                $opts[CURLOPT_CUSTOMREQUEST] = 'DELETE';
            case 'JSON_POST':
                $opts[CURLOPT_HTTPHEADER][] = 'Content-Type: application/json;';
                $opts[CURLOPT_URL] = $url;
                $opts[CURLOPT_POST] = 1;
                $opts[CURLOPT_POSTFIELDS] = json_encode($params);
                break;
            default:
                throw new \Exception('不支持的请求方式!');
        }

        /* 初始化并执行curl请求 */
        $ch = curl_init();
        curl_setopt_array($ch, $opts);
        $data  = curl_exec($ch);
        $error = curl_error($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);

        if ($error) {
            throw new \Exception('请求发生错误:'.$error);
        }
        if ($httpCode != 200) {
            $httpCode = $httpCode == 500 ? 506 : $httpCode;
            return response($data, $httpCode);
        }

        return  $data;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值