加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

http请求方法封装

发布时间:2020-05-31 00:02:09 所属栏目:PHP 来源:互联网
导读:http请求方法封装

下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。

脚本之家小编现在分享给大家,也给大家做个参考。

<?php
/**
 * Class Curl  curl简单封装 get post
 */
class Curl
{

    /**
     * @brief                  get请求
     * @param $url             请求的url
     * @param array $param     请求的参数
     * @param array $header    头部数据
     * @param int $timeout     超时时间
     * @param int $followAction 是否允许被抓取的链接跳转
     * @param int $gzip         是否启用gzip压缩
     * @param string $format    格式
     * @param int $log       是否启用日志
     * @return mixed
     */
    public static function get($url,$param = array(),$header = array(),$timeout = 3,$followAction = 0,$gzip = 0,$format = 'html',$log=0)
    {
        $ch = curl_init();
        if (is_array($param)) {
            $url = $url . '?' . http_build_query($param);
        }
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch,CURLOPT_HEADER,0);
        curl_setopt($ch,CURLOPT_TIMEOUT,$timeout);
        curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)");
        if ($followAction) {
            curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1); //允许被抓取的链接跳转
        }
        if ($gzip) {
            curl_setopt($ch,CURLOPT_HTTPHEADER,array('Accept-Encoding: gzip,deflate'));
            curl_setopt($ch,CURLOPT_ENCODING,'gzip,deflate');
        }
        //curl_setopt($ch,CURLOPT_REFERER,'');
        $data = curl_exec($ch);
        if ($format == 'json') {
            $data = json_decode($data,true);
        }

        if($log){
            if($format=='html'){
                self::_logCurlInfo($ch,$param,'');
            }else{
                self::_logCurlInfo($ch,$data);
            }
        }
        curl_close($ch);
        return $data;
    }

    /**
     * @brief                   post请求
     * @param $url              请求的url地址
     * @param array $param      请求的参数
     * @param array $header     http头
     * @param int $ssl          是否启用ssl
     * @param string $format    返回的格式
     * @param int $log          是否启用日志
     * @return mixed
     */
    public static function post($url,$ssl = 0,$format = 'json',$log=0)
    {
        $ch = curl_init();
        if (is_array($param)) {
            $urlparam = http_build_query($param);
        } else if (is_string($param)) { //json字符串
            $urlparam = $param;
        }
        curl_setopt($ch,120); //设置超时时间
        curl_setopt($ch,1); //返回原生的(Raw)输出
        curl_setopt($ch,CURLOPT_POST,1); //POST
        curl_setopt($ch,CURLOPT_POSTFIELDS,$urlparam); //post数据
        if ($header) {
            curl_setopt($ch,$header);
        }
        if ($ssl) {
            curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); // 对认证证书来源的检查
            curl_setopt($ch,CURLOPT_BINARYTRANSFER,true); //将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。
        }

        $data = curl_exec($ch);
        if ($format == 'json') {
            $data = json_decode($data,$data);
            }
        }
        curl_close($ch);
        return $data;
    }


    /**
     * 请求信息记录日志
     * @param $ch       curl句柄
     * @param $request  请求参数
     * @param $response 响应结果
     */
    private static function _logCurlInfo($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,$info['size_download']/1024,$info['speed_download']/1024);
        error_log($resultLogMsg.PHP_EOL,3,self::CURL_LOG_PATH);
    }

}

/* example:
    echo Curl::get('http://www.baidu.com');
    $arr = Curl::post('127.0.0.1/test/test.php',['a'=>1,'b'=>2],'',0);
    var_dump($arr);
*/

以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读