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 生成饼图 三维饼图
Sep 28 PHP
解析在PHP中使用全局变量的几种方法
Jun 24 PHP
PIGCMS 如何关闭聊天机器人
Feb 12 PHP
php修改文件上传限制方法汇总
Apr 07 PHP
为百度UE编辑器上传图片添加水印功能
Apr 16 PHP
php计算整个目录大小的方法
Jun 01 PHP
微信支付开发发货通知实例
Jul 12 PHP
谈谈PHP连接Access数据库的注意事项
Aug 12 PHP
php版微信公众平台开发之验证步骤实例详解
Sep 23 PHP
ecshop适应在PHP7的修改方法解决报错的实现
Nov 01 PHP
PHPStudy下如何为Apache安装SSL证书的方法步骤
Jan 23 PHP
phpcmsv9.0任意文件上传漏洞解析
Oct 20 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判断两个浮点数是否相等的方法
2015/03/14 PHP
PHP数组相关函数汇总
2015/03/24 PHP
使用javascript过滤html的字符串(注释标记法)
2013/07/08 Javascript
js数组转json并在后台对其解析具体实现
2013/11/20 Javascript
利用js判断浏览器类型(是否为IE,Firefox,Opera浏览器)
2013/11/22 Javascript
javascript实现数字验证码的简单实例
2014/02/10 Javascript
js图片处理示例代码
2014/05/12 Javascript
node.js中的querystring.escape方法使用说明
2014/12/10 Javascript
jQuery实现定时读取分析xml文件的方法
2015/07/16 Javascript
JavaScript的jQuery库中function的存在和参数问题
2015/08/13 Javascript
JS利用cookie记忆当前位置的防刷新导航效果
2015/10/15 Javascript
JS组件Bootstrap实现弹出框和提示框效果代码
2015/12/08 Javascript
JS实现点击Radio动态更新table数据
2017/07/18 Javascript
vue组件实现弹出框点击显示隐藏效果
2020/10/26 Javascript
webpack+vue.js构建前端工程化的详细教程
2020/05/10 Javascript
python基于pygame实现响应游戏中事件的方法(附源码)
2015/11/11 Python
基于Python实现通过微信搜索功能查看谁把你删除了
2016/01/27 Python
Python数据结构之顺序表的实现代码示例
2017/11/15 Python
python3基于OpenCV实现证件照背景替换
2018/07/18 Python
解决PyCharm控制台输出乱码的问题
2019/01/16 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
2020/03/06 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
2020/04/10 Python
基于Python实现2种反转链表方法代码实例
2020/07/06 Python
Python开发入门——迭代的基本使用
2020/09/03 Python
python实现图片,视频人脸识别(dlib版)
2020/11/18 Python
纯CSS实现颜色渐变效果(包含环形渐变、线性渐变、彩虹效果等)
2014/05/07 HTML / CSS
Ryderwear澳洲官网:澳大利亚高端健身训练装备品牌
2018/09/18 全球购物
极度干燥澳大利亚官方网站:Superdry澳大利亚
2019/03/28 全球购物
解释下面关于J2EE的名词
2013/11/15 面试题
个人求职简历的自我评价范文
2013/10/09 职场文书
即将毕业大学生自荐信
2014/01/24 职场文书
优秀社区干部事迹材料
2014/02/03 职场文书
小班重阳节活动方案
2014/02/08 职场文书
英语自我介绍演讲稿
2014/09/01 职场文书
KTV门卫岗位职责
2014/10/09 职场文书
SpringCloud Feign请求头删除修改的操作代码
2022/03/20 Java/Android