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编写大型网站问题集
Mar 06 PHP
php 表单验证实现代码
Mar 10 PHP
php之CodeIgniter学习笔记
Jun 17 PHP
PHP APC配置文件2套和参数详解
Jun 11 PHP
php+jQuery.uploadify实现文件上传教程
Dec 26 PHP
PHP执行SQL文件并将SQL文件导入到数据库
Sep 17 PHP
解析WordPress中控制用户登陆和判断用户登陆的PHP函数
Mar 01 PHP
php实现无限级分类查询(递归、非递归)
Mar 10 PHP
PHP安全下载文件的方法
Apr 07 PHP
PHP实现浏览器格式化显示XML的方法示例
Jan 22 PHP
ThinkPHP3.2.3框架实现的空模块、空控制器、空操作,跳转到错误404页面图文详解
Apr 03 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
Nov 24 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
php5 and xml示例
2006/11/22 PHP
php empty()与isset()区别的详细介绍
2013/06/17 PHP
如何使用php输出时间格式
2013/08/31 PHP
PHP Warning: Module 'modulename' already loaded in问题解决办法
2015/03/16 PHP
php发送http请求的常用方法分析
2016/11/08 PHP
在一个js文件里远程调用jquery.js会在ie8下的一个奇怪问题
2010/11/28 Javascript
几种延迟加载JS代码的方法加快网页的访问速度
2013/10/12 Javascript
js QQ客服悬浮效果实现代码
2014/12/12 Javascript
jQuery源码分析之Callbacks详解
2015/03/13 Javascript
Jquery和angularjs获取check框选中的值的方法汇总
2016/01/17 Javascript
jquery validate表单验证的基本用法入门
2016/01/18 Javascript
Bootstrap中的fileinput 多图片上传及编辑功能
2016/09/05 Javascript
nodejs微信公众号支付开发
2016/09/19 NodeJs
JS实现的简易拖放效果示例
2016/12/29 Javascript
微信小程序开发图片拖拽实例详解
2017/05/05 Javascript
npm 常用命令详解(小结)
2019/01/17 Javascript
VUE 实现复制内容到剪贴板的两种方法
2019/04/24 Javascript
Vue3.0结合bootstrap创建多页面应用
2019/05/28 Javascript
Python开发如何在ubuntu 15.10 上配置vim
2016/01/25 Python
Python 通过pip安装Django详细介绍
2017/04/28 Python
python matplotlib中文显示参数设置解析
2017/12/15 Python
Python标准库笔记struct模块的使用
2018/02/22 Python
python实现三维拟合的方法
2018/12/29 Python
python3实现zabbix告警推送钉钉的示例
2019/02/20 Python
Python 读取用户指令和格式化打印实现解析
2019/09/02 Python
Python缓存技术实现过程详解
2019/09/25 Python
python 实现图像快速替换某种颜色
2020/06/04 Python
浅析NumPy 切片和索引
2020/09/02 Python
新驾驶员个人自我评价
2014/01/03 职场文书
秋季运动会通讯稿
2014/01/24 职场文书
对外汉语专业大学生职业生涯规划范文
2014/09/13 职场文书
党的群众路线教育实践活动个人整改方案
2014/10/25 职场文书
财务部岗位职责范本
2015/04/14 职场文书
开会通知短信大全
2015/04/20 职场文书
JavaScript执行机制详细介绍
2021/12/06 Javascript
使用python创建股票的时间序列可视化分析
2022/03/03 Python