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 FPDF类库应用实现代码
Mar 20 PHP
ubuntu 编译安装php 5.3.3+memcache的方法
Aug 05 PHP
PHP stream_context_create()作用和用法分析
Mar 29 PHP
php中定时计划任务的实现原理
Jan 08 PHP
php中数字0和空值的区别分析
Jun 05 PHP
jQuery+PHP+ajax实现微博加载更多内容列表功能
Jun 27 PHP
ucenter通信原理分析
Jan 09 PHP
php+mysqli批量查询多张表数据的方法
Jan 29 PHP
php发送html格式文本邮件的方法
Jun 10 PHP
yii2.0整合阿里云oss删除单个文件的方法
Sep 19 PHP
Yii2结合Workerman的websocket示例详解
Sep 10 PHP
PHP fprintf()函数用法讲解
Feb 16 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 5.3.1 安装包 VC9 VC6不同版本的区别是什么
2010/07/04 PHP
PHP网络操作函数汇总
2015/05/18 PHP
分享PHP守护进程类
2015/12/30 PHP
PHP实现搜索地理位置及计算两点地理位置间距离的实例
2016/01/08 PHP
php构造方法中析构方法在继承中的表现
2016/04/12 PHP
Javascript !!的作用
2008/12/04 Javascript
jquery.AutoComplete.js中文修正版(支持firefox)
2010/04/09 Javascript
可编辑下拉框的2种实现方式
2014/06/13 Javascript
javascript使用prototype完成单继承
2014/12/24 Javascript
纯JS实现旋转图片3D展示效果
2015/04/12 Javascript
基于bootstrap3和jquery的分页插件
2015/07/31 Javascript
jsonp跨域请求数据实现手机号码查询实例分析
2015/12/12 Javascript
JavaScript学习笔记之数组随机排序
2016/03/23 Javascript
Ionic如何实现下拉刷新与上拉加载功能
2016/06/03 Javascript
Bootstrap登陆注册页面开发教程
2016/07/12 Javascript
浅谈javascript的闭包
2017/01/23 Javascript
AngularJS自定义指令实现面包屑功能完整实例
2017/05/17 Javascript
bootstrap可编辑下拉框jquery.editable-select
2017/10/12 jQuery
基于vue cli重构多页面脚手架过程详解
2018/01/23 Javascript
vue使用el-upload上传文件及Feign服务间传递文件的方法
2019/03/15 Javascript
使用watch在微信小程序中实现全局状态共享
2019/06/03 Javascript
jquery插件开发模式实例详解
2019/07/20 jQuery
跟老齐学Python之传说中的函数编写条规
2014/10/11 Python
python连接mysql实例分享
2016/10/09 Python
对pandas中to_dict的用法详解
2018/06/05 Python
Python使用指定字符长度切分数据示例
2019/12/05 Python
Python调用.net动态库实现过程解析
2020/06/05 Python
Aveda美国官网:天然护发产品、洗发水、护发素和沙龙
2016/12/09 全球购物
Urban Outfitters德国官网:美国跨国生活方式零售公司
2018/05/21 全球购物
网络工程师个人的自我评价范文
2013/10/01 职场文书
军训鉴定表自我鉴定
2014/02/13 职场文书
《水乡歌》教学反思
2014/04/24 职场文书
关于读书的演讲稿1000字
2014/08/27 职场文书
工作疏忽检讨书500字
2014/10/26 职场文书
学法用法心得体会(2016推荐篇)
2016/01/21 职场文书
Java 关于String字符串原理上的问题
2022/04/07 Java/Android