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 相关文章推荐
第十三节 对象串行化 [13]
Oct 09 PHP
php 常用字符串函数总结
Mar 15 PHP
php图片缩放实现方法
Feb 20 PHP
php上传文件问题汇总
Jan 30 PHP
了解PHP的返回引用和局部静态变量
Jun 04 PHP
php使用文本统计访问量的方法
May 12 PHP
一段实用的php验证码函数
May 19 PHP
PHP+MySql+jQuery实现的"顶"和"踩"投票功能
May 21 PHP
Yii框架防止sql注入,xss攻击与csrf攻击的方法
Oct 18 PHP
PHP实现自动发送邮件功能代码(qq 邮箱)
Aug 18 PHP
PHP实现压缩图片尺寸并转为jpg格式的方法示例
May 10 PHP
laravel 修改记住我功能的cookie保存时间的方法
Oct 14 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生成Gif图片验证码
2013/10/27 PHP
微信API接口大全
2015/04/15 PHP
使用PHPCMS搭建wap手机网站
2015/09/20 PHP
PHP模板引擎Smarty内建函数foreach,foreachelse用法分析
2016/04/11 PHP
php快速导入大量数据的实例方法
2019/09/23 PHP
js中方法重载如何实现?以及函数的参数问题
2013/08/01 Javascript
js 动态加载事件的几种方法总结
2013/12/25 Javascript
js 中将多个逗号替换为一个逗号的代码
2014/06/07 Javascript
Nginx上传文件全部缓存解决方案
2015/08/17 Javascript
vue.js入门教程之基础语法小结
2016/09/01 Javascript
js阻止冒泡和默认事件(默认行为)详解
2016/10/20 Javascript
Bootstrap基本插件学习笔记之按钮(21)
2016/12/08 Javascript
js+html5实现页面可刷新的倒计时效果
2017/07/15 Javascript
轻量级JS Cookie插件js-cookie的使用方法
2018/03/22 Javascript
JavaScript实现PC端四格密码输入框功能
2020/02/19 Javascript
vue-autoui自匹配webapi的UI控件的实现
2020/03/20 Javascript
Vue实现腾讯云点播视频上传功能的实现代码
2020/08/17 Javascript
[02:23]1个至宝=115个英雄特效 最“绿”至宝拉比克“魔导师密钥”登场
2018/12/29 DOTA
使用python BeautifulSoup库抓取58手机维修信息
2013/11/21 Python
python实现数据分析与建模
2019/07/11 Python
Python面向对象之继承原理与用法案例分析
2019/12/31 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
2020/03/18 Python
Python HTTP下载文件并显示下载进度条功能的实现
2020/04/02 Python
基于python实现数组格式参数加密计算
2020/04/21 Python
使用OpenCV对车道进行实时检测的实现示例代码
2020/06/19 Python
浅析PyCharm 的初始设置(知道)
2020/10/12 Python
python从PDF中提取数据的示例
2020/10/30 Python
CSS3中的content属性使用示例
2015/07/20 HTML / CSS
简述进程的启动、终止的方式以及如何进行进程的查看
2013/07/12 面试题
卫生巾广告词
2014/03/18 职场文书
加入学生会演讲稿
2014/04/24 职场文书
毕业班班主任工作总结2015
2015/07/23 职场文书
军训心得体会范文(2016最新篇)
2016/01/11 职场文书
如何在CocosCreator里画个炫酷的雷达图
2021/04/16 Javascript
再也不用花钱买漫画!Python爬取某漫画的脚本及源码
2021/06/09 Python
win10此电脑打不开怎么办 win10双击此电脑无响应的解决办法
2022/07/23 数码科技