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 和 COM
Oct 09 PHP
PHP中的MYSQL常用函数(php下操作数据库必备)
Sep 12 PHP
php GeoIP的使用教程
Mar 09 PHP
那些年一起学习的PHP(三)
Mar 22 PHP
php cURL和Rolling cURL并发方式比较
Oct 30 PHP
PHP中可以自动分割查询字符的Parse_str函数使用示例
Jul 25 PHP
PHP实现下载断点续传的方法
Nov 12 PHP
浅析THINKPHP的addAll支持的最大数据量
Feb 03 PHP
php计算两个坐标(经度,纬度)之间距离的方法
Apr 17 PHP
Smarty模板引擎缓存机制详解
May 23 PHP
PHP编程之设置apache虚拟目录
Jul 08 PHP
php文件操作之文件写入字符串、数组的方法分析
Apr 15 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
工厂模式在Zend Framework中应用介绍
2012/07/10 PHP
解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
2013/06/24 PHP
8个必备的PHP功能实例代码
2013/10/27 PHP
php header函数的常用http头设置
2015/06/25 PHP
Thinkphp+smarty+uploadify实现无刷新上传
2015/07/30 PHP
Smarty变量用法详解
2016/05/11 PHP
JavaScript 闭包深入理解(closure)
2009/05/27 Javascript
JavaScript导出Excel实例详解
2014/11/25 Javascript
node.js中的http.response.getHeader方法使用说明
2014/12/14 Javascript
JavaScript使用Replace进行字符串替换的方法
2015/04/14 Javascript
jquery中ajax处理跨域的三大方式
2016/01/05 Javascript
React.js入门实例教程之创建hello world 的5种方式
2016/05/11 Javascript
jquery删除table当前行的实例代码
2016/10/07 Javascript
自学实现angularjs依赖注入
2016/12/20 Javascript
js+canvas实现动态吃豆人效果
2017/03/22 Javascript
vue.js实现条件渲染的实例代码
2017/06/22 Javascript
微信小程序实现两边小中间大的轮播效果的示例代码
2018/12/07 Javascript
详解vue+axios给开发环境和生产环境配置不同的接口地址
2019/08/16 Javascript
小程序如何定位所在城市及发起周边搜索
2020/02/11 Javascript
jQuery实现视频展示效果
2020/05/30 jQuery
jQuery-App输入框实现实时搜索
2020/11/19 jQuery
Python实现周期性抓取网页内容的方法
2015/11/04 Python
使用python3批量下载rbsp数据的示例代码
2019/12/20 Python
python报错: 'list' object has no attribute 'shape'的解决
2020/07/15 Python
基于python实现操作redis及消息队列
2020/08/27 Python
纯css3实现的鼠标悬停动画按钮
2014/12/23 HTML / CSS
泰国第一的化妆品网站:Konvy
2018/02/25 全球购物
房地产开盘策划方案
2014/02/10 职场文书
财务担保书范文
2014/04/02 职场文书
2015年高校图书馆工作总结
2015/04/30 职场文书
2015年教师节感言
2015/08/03 职场文书
使用pytorch实现线性回归
2021/04/11 Python
Python 数据科学 Matplotlib图库详解
2021/07/07 Python
Linux系统下MySQL配置主从分离的步骤
2022/03/21 MySQL
TypeScript 使用 Tuple Union 声明函数重载
2022/04/07 Javascript
MySQL生成千万测试数据以及遇到的问题
2022/08/05 MySQL