php远程请求CURL案例(爬虫、保存登录状态)


Posted in PHP onApril 01, 2021

GET案例

/**
 * curl_get
 * @param $url
 * @param null $param
 * @param null $options
 * @return array
 */
function curl_get($url,$param = null,$options = null){
    if(empty($options)){
        $options = array(
            'timeout' 		=> 30,// 请求超时
            'header' 		=> array(),// 数据格式如array('Accept: */*','Accept-Encoding: gzip, deflate, br');直接复制浏览器请求头改成一维数组即可
            'cookie' 		=> '',// cookie字符串,浏览器直接复制即可
            'cookie_file'   => '',// 文件路径,并要有读写权限的
            'ssl' 			=> 0,// 是否检查https协议
            'referer' 		=> null
        );
    }else{
        empty($options['timeout']) && $options['timeout'] = 30;
        empty($options['ssl']) && $options['ssl']	= 0;
    }
    $result = array(
        'code'      => 0,
        'msg'       => 'success',
        'body'      => ''
    );
    if(is_array($param)){
        $param = http_build_query($param);
    }
    $url = strstr($url,'?')?trim($url,'&').'&'.$param:$url.'?'.$param;
    $ch = curl_init();

    curl_setopt($ch,CURLOPT_URL, $url);// 设置url
    !empty($options['header']) && curl_setopt($ch, CURLOPT_HTTPHEADER, $options['header']); // 设置请求头
    if(!empty($options['cookie_file']) && file_exists($options['cookie_file'])){
        curl_setopt($ch, CURLOPT_COOKIEFILE, $options['cookie_file']);
        curl_setopt($ch, CURLOPT_COOKIEJAR, $options['cookie_file']);
    }else if(!empty($options['cookie'])){
        curl_setopt($ch, CURLOPT_COOKIE, $options['cookie']);
    }
    curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); //curl解压gzip页面内容
    curl_setopt($ch, CURLOPT_HEADER, 0);// 不获取请求头
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// 输出转移,不输出页面
    !$options['ssl'] && curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $options['ssl']); // 禁止服务器端的验证ssl
    !empty($options['referer']) && curl_setopt($ch, CURLOPT_REFERER, $options['referer']);//伪装请求来源,绕过防盗
    curl_setopt($ch, CURLOPT_TIMEOUT, $options['timeout']);
    //执行并获取内容
    $output = curl_exec($ch);
    //对获取到的内容进行操作
    if($output === FALSE ){
        $result['code'] = 1; // 错误
        $result['msg'] = "CURL Error:".curl_error($ch);
    }
    $result['body'] = $output;
    //释放curl句柄
    curl_close($ch);
    return $result;
}

POST案例

/**
 * curl_post
 * @param $url              请求地址
 * @param null $param       get参数
 * @param array $options    配置参数
 * @return array
 */
function curl_post($url,$param = null,$options = array()){
    if(empty($options)){
        $options = array(
            'timeout' 		=> 30,
            'header' 		=> array(),
            'cookie' 		=> '',
            'cookie_file'   => '',
            'ssl' 			=> 0,
            'referer' 		=> null
        );
    }else{
        empty($options['timeout']) && $options['timeout'] = 30;
        empty($options['ssl']) && $options['ssl']	= 0;
    }

    $result = array(
        'code'      => 0,
        'msg'       => 'success',
        'body'      => ''
    );
    if(is_array($param)){
        $param = http_build_query($param);
    }
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);// 设置url
    !empty($options['header']) && curl_setopt($ch, CURLOPT_HTTPHEADER, $options['header']); // 设置请求头
    if(!empty($options['cookie_file']) && file_exists($options['cookie_file'])){
        curl_setopt($ch, CURLOPT_COOKIEFILE, $options['cookie_file']);
        curl_setopt($ch, CURLOPT_COOKIEJAR, $options['cookie_file']);
    }else if(!empty($options['cookie'])){
        curl_setopt($ch, CURLOPT_COOKIE, $options['cookie']);
    }


    curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); //curl解压gzip页面内容
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
    curl_setopt($ch, CURLOPT_HEADER, 0);// 不获取请求头
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// 输出转移,不输出页面
    !$options['ssl'] && curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $options['ssl']); // 禁止服务器端的验证ssl
    !empty($options['referer']) && curl_setopt($ch, CURLOPT_REFERER, $options['referer']);//伪装请求来源,绕过防盗
    curl_setopt($ch, CURLOPT_TIMEOUT, $options['timeout']);
    //执行并获取内容
    $output = curl_exec($ch);
    //对获取到的内容进行操作
    if($output === FALSE ){
        $result['code'] = 1; // 错误
        $result['msg'] = "CURL Error:".curl_error($ch);
    }
    $result['body'] = $output;
    //释放curl句柄
    curl_close($ch);
    return $result;
}

其他请求类型请自己参考封装处理

PHP 相关文章推荐
在线短消息收发的程序,不用数据库
Oct 09 PHP
php Sql Server连接失败问题及解决办法
Aug 07 PHP
php 静态页面中显示动态内容
Aug 14 PHP
Ajax实时验证用户名/邮箱等是否已经存在的代码打包
Dec 01 PHP
php实现简单爬虫的开发
Mar 28 PHP
iOS10推送通知开发教程
Sep 19 PHP
PHP实现的同步推荐操作API接口案例分析
Nov 30 PHP
PHP使用preg_split和explode分割textarea存放内容的方法分析
Jul 03 PHP
php实现保存周期为1天的购物车类
Jul 07 PHP
PHP设计模式之模板方法模式定义与用法详解
Apr 02 PHP
阿里云的WindowsServer2016上部署php+apache
Jul 17 PHP
Laravel 创建可以传递参数 Console服务的例子
Oct 14 PHP
php 防护xss,PHP的防御XSS注入的终极解决方案
Apr 01 #PHP
WordPress多语言翻译插件 - WPML使用教程
php 获取音视频时长,PHP 利用getid3 获取音频文件时长等数据
微信小程序和php的登录实现
Apr 01 #PHP
PHP新手指南
PHP命令行与定时任务
Apr 01 #PHP
解决thinkphp6(tp6)在状态码500下不报错,或者显示错误“Malformed UTF-8 characters”的问题
Apr 01 #PHP
You might like
Yii2.0 Basic代码中路由链接被转义的处理方法
2016/09/21 PHP
js控制不同的时间段显示不同的css样式的实例代码
2013/11/04 Javascript
js查找某元素中的所有图片地址的方法
2014/01/16 Javascript
ionic js 模型 $ionicModal 可以遮住用户主界面的内容框
2016/06/06 Javascript
详解vue-Resource(与后端数据交互)
2017/01/16 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(1)
2017/02/20 Javascript
轻松学习Javascript闭包
2017/03/01 Javascript
windows下vue-cli导入bootstrap样式
2017/04/25 Javascript
bootstrap日期插件daterangepicker使用详解
2017/10/19 Javascript
vue权限管理系统的实现代码
2019/01/17 Javascript
vue 自定义右键样式的实例代码
2019/11/06 Javascript
如何在wxml中直接写js代码(wxs)
2019/11/14 Javascript
小程序中的箭头函数的具体使用
2020/06/19 Javascript
Python捕捉和模拟鼠标事件的方法
2015/06/03 Python
Python3实现的画图及加载图片动画效果示例
2018/01/19 Python
mac PyCharm添加Python解释器及添加package路径的方法
2018/10/29 Python
Python列表常见操作详解(获取,增加,删除,修改,排序等)
2019/02/18 Python
对DJango视图(views)和模版(templates)的使用详解
2019/07/17 Python
Python figure参数及subplot子图绘制代码
2020/04/18 Python
Python异常处理机制结构实例解析
2020/07/23 Python
Python大批量搜索引擎图像爬虫工具详解
2020/11/16 Python
CSS3新增布局之: flex详解
2020/06/18 HTML / CSS
HTML5之SVG 2D入门5—颜色的表示及定义方式
2013/01/30 HTML / CSS
亚马逊墨西哥站:Amazon.com.mx
2018/08/26 全球购物
澳大利亚女装精品店:Alannah Hill
2020/07/29 全球购物
外语学院毕业生的自我鉴定
2013/11/28 职场文书
母亲追悼会答谢词
2014/01/27 职场文书
刚毕业大学生自荐信范文
2014/02/20 职场文书
父母寄语大全
2014/04/12 职场文书
公务员诚信承诺书
2014/05/26 职场文书
绿色出行口号
2014/06/18 职场文书
巾帼志愿者活动方案
2014/08/17 职场文书
追悼会家属答谢词
2015/09/29 职场文书
goland 恢复已更改文件的操作
2021/04/28 Golang
Nginx性能优化之Gzip压缩设置详解(最大程度提高页面打开速度)
2022/02/12 Servers
十大最帅动漫男主 碓冰拓海上榜,第一是《灌篮高手》男主角
2022/03/18 日漫