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 相关文章推荐
PHP5 操作MySQL数据库基础代码
Sep 29 PHP
php实现与erlang的二进制通讯实例解析
Jul 23 PHP
php创建多级目录的方法
Mar 24 PHP
微信自定义菜单的处理开发示例
Apr 16 PHP
php递归删除指定文件夹的方法小结
Apr 20 PHP
PHP使用Pear发送邮件(Windows环境)
Jan 05 PHP
解析 thinkphp 框架中的部分方法
May 07 PHP
PHP实现登录验证码校验功能
May 17 PHP
PHP操作XML中XPath的应用示例
Jul 04 PHP
Thinkphp5.0框架视图view的循环标签用法示例
Oct 12 PHP
PHP利用curl发送HTTP请求的实例代码
Jul 09 PHP
使用php的mail()函数实现发送邮件功能
Jun 03 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
php记录日志的实现代码
2011/08/08 PHP
php代码中使用换行及(\n或\r\n和br)的应用
2013/02/02 PHP
本地机apache配置基于域名的虚拟主机详解
2013/08/10 PHP
php取整函数ceil,floo,round的用法及介绍
2013/08/31 PHP
php导出csv格式数据并将数字转换成文本的思路以及代码分享
2014/06/05 PHP
PHP轻量级数据库操作类Medoo增加、删除、修改、查询例子
2014/07/04 PHP
Laravel 5框架学习之环境与配置
2015/04/08 PHP
不一样的文字闪烁 轮番闪烁
2009/11/11 Javascript
JavaScript对象和字串之间的转换实例探讨
2013/04/21 Javascript
限制上传文件大小和格式的jQuery插件实例
2015/01/24 Javascript
jQuery实现仿Alipay支付宝首页全屏焦点图切换特效
2015/05/04 Javascript
BootStrap智能表单实战系列(十一)级联下拉的支持
2016/06/13 Javascript
JS如何生成一个不重复的ID的函数
2016/12/25 Javascript
js实现五星评价功能
2017/03/08 Javascript
关于TypeScript模块导入的那些事
2018/06/12 Javascript
Vue+ElementUI使用vue-pdf实现预览功能
2019/11/26 Javascript
用Python代码来解图片迷宫的方法整理
2015/04/02 Python
详解Python中time()方法的使用的教程
2015/05/22 Python
Python实现读取邮箱中的邮件功能示例【含文本及附件】
2017/08/05 Python
Python编程scoketServer实现多线程同步实例代码
2018/01/29 Python
Python安装模块的常见问题及解决方法
2018/02/05 Python
Python+threading模块对单个接口进行并发测试
2019/06/25 Python
python函数修饰符@的使用方法解析
2019/09/02 Python
Python SQLAlchemy入门教程(基本用法)
2019/11/11 Python
tensorflow 分类损失函数使用小记
2020/02/18 Python
KEETSA环保床垫:更好的睡眠,更好的生活!
2016/11/24 全球购物
北美最大的参茸药食商城:德成行
2020/12/06 全球购物
文员个人的求职信范文
2013/09/26 职场文书
社区交通安全实施方案
2014/03/22 职场文书
产品包装策划方案
2014/05/18 职场文书
党员教师个人对照检查材料(群众路线)
2014/09/26 职场文书
2016春季田径运动会广播稿
2015/12/21 职场文书
婚礼必备主持词范本!
2019/07/23 职场文书
JS如何使用剪贴板操作Clipboard API
2021/05/17 Javascript
SpringCloud Alibaba 基本开发框架搭建过程
2021/06/13 Java/Android
基于Redis6.2.6版本部署Redis Cluster集群的问题
2022/04/01 Redis