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 相关文章推荐
如何在PHP中使用Oracle数据库(2)
Oct 09 PHP
基于mysql的bbs设计(一)
Oct 09 PHP
php中对xml读取的相关函数的介绍一
Jun 05 PHP
详解WordPress开发中的get_post与get_posts函数使用
Jan 04 PHP
php实现XML和数组的相互转化功能示例
Feb 08 PHP
PHP单例模式与工厂模式详解
Aug 29 PHP
PHP实现的链式队列结构示例
Sep 15 PHP
laravel migrate初学常见错误的解决方法
Oct 11 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
Apr 04 PHP
laravel框架语言包拓展实现方法分析
Nov 22 PHP
PHP时间相关常用函数用法示例
Jun 03 PHP
php随机生成验证码,php随机生成数字,php随机生成数字加字母!
Apr 01 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
ajax在joomla中的原生态应用代码
2012/07/19 PHP
PHP树的深度编历生成迷宫及A*自动寻路算法实例分析
2015/03/10 PHP
Laravel框架实现model层的增删改查(CURD)操作示例
2018/05/12 PHP
PHP实现的AES 128位加密算法示例
2019/09/16 PHP
PHP cookie与session会话基本用法实例分析
2019/11/18 PHP
JavaScript 5 新增 Array 方法实现介绍
2012/02/06 Javascript
屏蔽网页右键复制和ctrl+c复制的js代码
2013/01/04 Javascript
Javscript调用iframe框架页面中函数的方法
2014/11/01 Javascript
浅谈javascript的调试
2015/01/28 Javascript
Jquery日期选择datepicker插件用法实例分析
2015/06/08 Javascript
js实现跨域的方法实例详解
2015/06/24 Javascript
原生js轮播特效
2017/05/18 Javascript
详解Vue的ref特性的使用
2020/01/24 Javascript
Python 代码性能优化技巧分享
2012/08/07 Python
python使用xlrd模块读写Excel文件的方法
2015/05/06 Python
python之PyMongo使用总结
2017/05/26 Python
浅析Python中return和finally共同挖的坑
2017/08/18 Python
Python实现小数转化为百分数的格式化输出方法示例
2017/09/20 Python
python通过socket实现多个连接并实现ssh功能详解
2017/11/08 Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
2018/07/11 Python
Python File(文件) 方法整理
2019/02/18 Python
python实现海螺图片的方法示例
2019/05/12 Python
python实现关闭第三方窗口的方法
2019/06/28 Python
pandas 缺失值与空值处理的实现方法
2019/10/12 Python
python中seaborn包常用图形使用详解
2019/11/25 Python
Python基于xlrd模块处理合并单元格
2020/07/28 Python
python 线程的五个状态
2020/09/22 Python
用HTML5中的Canvas结合公式绘制粒子运动的教程
2015/05/08 HTML / CSS
巴西Bo.Bô官方在线商店:经营奢侈品时尚业务
2020/03/16 全球购物
大学毕业生个人自荐信范文
2014/01/08 职场文书
技校个人求职信范文
2014/01/25 职场文书
关于运动会广播稿200字
2014/10/08 职场文书
2014年平安夜寄语
2014/12/08 职场文书
大学生暑期实践报告之企业经营管理
2019/08/08 职场文书
win10安装配置nginx的过程
2021/03/31 Servers
什么是css原子化,有什么用?
2022/04/24 HTML / CSS