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 模板高级篇总结
Dec 21 PHP
mysql_num_rows VS COUNT 效率问题分析
Apr 23 PHP
php用正则表达式匹配URL的简单方法
Nov 12 PHP
php截取中文字符串不乱码的方法
Dec 25 PHP
php中3种方法删除字符串中间的空格
Mar 10 PHP
PHP实现生成唯一编号(36进制的不重复编号)
Jul 01 PHP
PHP保存带BOM文件的方法
Feb 12 PHP
php文件缓存类用法实例分析
Apr 22 PHP
php简单socket服务器客户端代码实例
May 18 PHP
PHP简单实现上一页下一页功能示例
Sep 14 PHP
php 读写json文件及修改json的方法
Mar 07 PHP
PHP使用pdo连接access数据库并循环显示数据操作示例
Jun 05 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
Protoss魔法科技
2020/03/14 星际争霸
PHP 得到根目录的 __FILE__ 常量
2008/07/23 PHP
php读取javascript设置的cookies的代码
2010/04/12 PHP
php从字符串创建函数的方法
2015/03/16 PHP
HTML TO JavaScript 转换
2006/06/26 Javascript
比较详细的javascript对象的property和prototype是什么一种关系
2007/08/06 Javascript
setInterval 和 setTimeout会产生内存溢出
2008/02/15 Javascript
Chrome中JSON.parse的特殊实现
2011/01/12 Javascript
jquery乱码与contentType属性设置问题解决方案
2013/01/07 Javascript
httpclient模拟登陆具体实现(使用js设置cookie)
2013/12/11 Javascript
js实现的复制兼容chrome和IE
2014/04/03 Javascript
基于jQuery插件实现环形图标菜单旋转切换特效
2015/05/15 Javascript
详细分析JavaScript变量类型
2015/07/08 Javascript
JavaScript对数组进行随机重排的方法
2015/07/22 Javascript
Angular.js 4.x中表单Template-Driven Forms详解
2017/04/25 Javascript
Webpack常见静态资源处理-模块加载器(Loaders)+ExtractTextPlugin插件
2017/06/29 Javascript
详解小程序输入框闪烁及重影BUG解决方案
2018/08/31 Javascript
jQuery事件blur()方法的使用实例讲解
2019/03/30 jQuery
vue.js中使用微信扫一扫解决invalid signature问题(完美解决)
2020/04/11 Javascript
python调用shell的方法
2013/11/20 Python
Python字符串匹配算法KMP实例
2015/07/18 Python
使用Python读取安卓手机的屏幕分辨率方法
2018/03/31 Python
Python 使用 prettytable 库打印表格美化输出功能
2019/12/26 Python
基于pytorch 预训练的词向量用法详解
2020/01/06 Python
Python离线安装各种库及pip的方法
2020/11/28 Python
详解css3 object-fit属性
2018/07/27 HTML / CSS
Jacadi Paris美国官方网站:法国童装品牌
2017/10/15 全球购物
英国时尚泳装品牌:Maru Swimwear
2019/10/06 全球购物
UNIX操作系统结构由哪几部分组成
2016/02/17 面试题
五年级科学教学反思
2014/02/05 职场文书
《槐乡五月》教学反思
2014/04/25 职场文书
关爱老人标语
2014/06/21 职场文书
办理收楼委托书范本
2014/10/09 职场文书
个人合伙协议书范本
2014/10/14 职场文书
领导干部个人整改措施落实情况汇报
2014/10/29 职场文书
vue使用wavesurfer.js解决音频可视化播放问题
2022/04/04 Vue.js