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中使用smarty生成静态文件的例子
Apr 24 PHP
php获取apk包信息的方法
Aug 15 PHP
php调用mysql存储过程实例分析
Dec 29 PHP
php中get_cfg_var()和ini_get()的用法及区别
Mar 04 PHP
PHP实现算式验证码和汉字验证码实例
Mar 09 PHP
CodeIgniter钩子用法实例详解
Jan 20 PHP
PHP实现截取中文字符串不出现?号的解决方法
Dec 29 PHP
php 截取GBK文档某个位置开始的n个字符方法
Mar 08 PHP
php利用ffmpeg提取视频中音频与视频画面的方法详解
Jun 07 PHP
thinkPHP5框架接口写法简单示例
Aug 05 PHP
PHP PDO和消息队列的个人理解与应用实例分析
Nov 25 PHP
PHP使用QR Code生成二维码实例
Jul 07 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基础教程 php内置函数实例教程
2012/08/21 PHP
PHP错误提示的关闭方法详解
2013/06/23 PHP
学习ExtJS fit布局使用说明
2009/10/08 Javascript
28个JS验证函数收集
2010/03/02 Javascript
用js实现的自定义的对话框的实现代码
2010/03/21 Javascript
基于jQuery的固定表格头部的代码(IE6,7,8测试通过)
2010/05/18 Javascript
javascript学习(二)javascript常见问题总结
2013/01/02 Javascript
jQuery实现用方向键控制层的上下左右移动
2013/01/13 Javascript
JavaScript的漂亮的代码片段
2013/06/05 Javascript
jQuery实现用户注册的表单验证示例
2013/08/28 Javascript
jquery更换文章内容与改变字体大小代码
2013/09/30 Javascript
利用JavaScript实现新闻滚动效果(实例代码)
2013/11/27 Javascript
vue-cli之router基本使用方法详解
2017/10/17 Javascript
使用axios实现上传图片进度条功能
2017/12/21 Javascript
浅谈在node.js进入文件目录的问题
2018/05/13 Javascript
在vue项目中引入高德地图及其UI组件的方法
2018/09/04 Javascript
记一次webapck4 配置文件无效的解决历程
2018/09/19 Javascript
js模拟F11页面全屏显示
2019/09/17 Javascript
微信小程序使用GoEasy实现websocket实时通讯
2020/05/19 Javascript
解决Antd 里面的select 选择框联动触发的问题
2020/10/24 Javascript
Vue 列表页带参数进详情页的操作(router-link)
2020/11/13 Javascript
[38:23]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第一场
2014/05/24 DOTA
[00:20]TI9不朽观赛名额抽取
2019/08/05 DOTA
[03:07]完美世界DOTA2联赛PWL DAY10 决赛集锦
2020/11/11 DOTA
一个简单的python程序实例(通讯录)
2013/11/29 Python
python进阶_浅谈面向对象进阶
2017/08/17 Python
在PyCharm中三步完成PyPy解释器的配置的方法
2018/10/29 Python
python3.6环境安装+pip环境配置教程图文详解
2019/06/20 Python
解决Django中多条件查询的问题
2019/07/18 Python
python__new__内置静态方法使用解析
2020/01/07 Python
HTML5 placeholder(空白提示)属性介绍
2013/08/07 HTML / CSS
廉价连衣裙和婚纱礼服在线销售:Tbdress
2019/02/28 全球购物
客服服务心得体会
2013/12/30 职场文书
文明餐桌活动方案
2014/02/11 职场文书
班级团队活动方案
2014/08/14 职场文书
英语教师个人总结
2015/02/09 职场文书