Php curl可扩展封装函数1.1

@Ta 2017-11-04发布,2017-11-05修改 6482点击
在网上找了很多curl封装函数和类,发现不是太复杂就是太简单或者功能不全,要么就是命名规范和程序设定以及函数用法不是自己喜欢的风格,我又懒得再去找,所以就花了点时间自己封装了个自认为超级完美且用法简单的curl函数,现在分享出来,希望有人喜欢。

1.1增加了自动解压编码格式和保存cookie文件...

用这个函数实现的HTTP模拟访问工具https://tool.phpe.top/

欢迎访问我的博客https://3ghh.cn

用法1
curl($url)->result;
用法2
curl($url,$post)->result;
用法3
curl($url,'',['USERAGENT'=>'要设定的ua','REFERER'=>'要设定的来源地址','HTTP_HEADER'=>['Accept: */*','Accept-Language: en-us
']])->result; //除了这些还能设定其他的,具体请参考CURL教程

最后一个参数$default如果设为false则关闭默认选项设置


function curl($url, $post = '', $option = [], $default = true)
{
    /*
     * curl 1.1 3ghh.cn
     * @param string                    $url:url地址
     * @param string|array	            $post:post数据(可选)
     * @param null|array                $option:扩展选项(可选)
     * @param bool                      $default:默认选项(可选)
     * @return ArrayObject              echo curl('http://3ghh.cn','',['CONNECTTIMEOUT'=>1])->result;
     */
    #初始化
    $ch = curl_init();
    #选项
    //请求的URL
    curl_setopt($ch, CURLOPT_URL, $url);
    //POST数据
    $post == '' ?: curl_setopt($ch, CURLOPT_POST, true) && curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    #固定选项
    //不自动打印结果
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    //info中包含请求头 return array
    curl_setopt($ch, CURLINFO_HEADER_OUT, true);
    //验证证书
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    //指定协议
    curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
    //自动解压编码格式
    curl_setopt($ch, CURLOPT_ACCEPT_ENCODING, '');
    if ($default == true) {
        #默认选项
        //使用浏览器者UA
        curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
        //请求超时时间,单位秒
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);
        //重定向跟踪
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        //result中包含响应头部内容
        curl_setopt($ch, CURLOPT_HEADER, false);
        //result中不包含响应主体内容
        curl_setopt($ch, CURLOPT_NOBODY, false);
        //设置Cookie文件保存位置
        $cookie_file = getcwd() . '/cookie.tmp';//函数调用代码所在脚本的目录
        //将请求时得到的Cookie保存 (要保存请将fasle改为$cookie_file)
        curl_setopt($ch, CURLOPT_COOKIEJAR, false);
    }
    if ($option != null && is_array($option)) {
        #扩展选项
        foreach ($option as $key => $value) {
            curl_setopt($ch, constant('CURLOPT_' . $key), $value);
        }
    }
    #执行
    $result = curl_exec($ch);
    $info = curl_getinfo($ch);
    //错误处理
    $error = $errno = NULL;
    if ($errno = curl_errno($ch)) {
        $result = $error = curl_error($ch);
    }
    #关闭
    curl_close($ch);
    //创建数组对象
    $out = new ArrayObject();
    #结果
    $out->result = $result;
    #信息
    $out->info = $info;
    #错误代码
    $out->errno = $errno;
    #错误提示
    $out->error = $error;
    //返回数组对象
    return $out;
}
回复列表(11|隐藏机器人聊天)
添加新回复
回复需要登录