PHP封装一个通用的CURL类方法(设置、获取请求头响应头并处理)

通用的一个CURL类方法,设置请求头、获取响应头等! 包括将格式处理成数组格式,方便直接输出

    /**
     * 发送https post请求,也支持http请求,包括header请求
     * @param string $url 请求域名
     * @param string $data 发送数据
     * @param array  $headers 请求头信息
     * @return string
     */
    static public function httpsRequestHeaders($url, $data = null, $headers = null)
    {

        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
        //设置post请求
        if (!empty($data)) {
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
        //设置请求头
        if(!empty($headers)){
            curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
        }
        //curl_setopt($curl, CURLOPT_TIMEOUT,60);
        //至关重要,CURLINFO_HEADER_OUT选项可以拿到请求头信息
        curl_setopt($curl, CURLINFO_HEADER_OUT, TRUE);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

        $arr = [];
        // 返回 response_header, 该选项非常重要,如果不为 true, 只会获得响应的正文
        curl_setopt($curl, CURLOPT_HEADER, true);
        // 是否不需要响应的正文,为了节省带宽及时间,在只需要响应头的情况下可以不要正文
        //curl_setopt($curl, CURLOPT_NOBODY, true);
        $arr['request']      = curl_exec($curl);
        $request_header      = curl_getinfo($curl);     
        // 获取请求头    
        $request_header      = isset($request_header['request_header']) ? $request_header['request_header'] : '';   
        // 获得响应结果里的:头大小
        $headerSize          = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
        //响应码
        $arr['http_code']     = curl_getinfo($curl,CURLINFO_HTTP_CODE);
        // 根据头大小去获取头信息内容(响应头)
        $respon_header       = substr($arr['request'], 0, $headerSize);
        //获取返回值
        $arr['request']     = substr($arr['request'], $headerSize);
        $responCutting       = explode("\n", $respon_header);
        $responHeader        = [];
       
        //将respon header 处理成数组格式
        foreach ($responCutting as $k => $v) {
            //$v = 'Date: Mon, 20 Aug 2018 03:22:11 GMT';
            if($v != ''){
                $strpos  = strpos($v, ":");
                if(!empty($strpos) && empty(strpos("*".$v,"HTTP "))){
                    $startSubstr                  = substr($v, 0, $strpos);
                    $endSubstr                    = trim(substr($v, $strpos+1));
                    $responHeader[$startSubstr]   = $endSubstr;           
                }else{
                    
                    $strpos = strpos("**".$v, "HTTP");
                    if(!empty($strpos)){
                        $responHeader['Status Code'] = $v;
                    }
                }                
            }
        }

        //将request header 处理成数组格式
        $requestCutting = explode("\n", $request_header);
        $requestHeader  = [];
        foreach ($requestCutting as $kk => $vv) {
            if($vv != ''){
                $strpos  = strpos($vv, ":");
                if(!empty($strpos) && empty(strpos("*".$vv,"HEAD ")) && empty(strpos("*".$vv,"HTTP"))){
                    $startSubstr                  = substr($vv, 0, $strpos);
                    $endSubstr                    = trim(substr($vv, $strpos+1));
                    $requestHeader[$startSubstr]  = $endSubstr;     
                }             
            }
        }

        $arr['respon_headers']   = $responHeader;
        $arr['request_headers']  = $requestHeader;
        curl_close($curl);
        
        return $arr;
    }
发布了54 篇原创文章 · 获赞 209 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/qq_34284638/article/details/83348157