php远程请求CURL实例教程(爬虫、保存登录状态)


Posted in PHP onDecember 10, 2020

cURL

cURL可以使用URL的语法模拟浏览器来传输数据,因为它是模拟浏览器,因此它同样支持多种协议,FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP等协议都可以很好的支持,包括一些:HTTPS认证,HTTP POST方法,HTTP PUT方法,FTP上传,keyberos认证,HTTP上传,代理服务器,cookies,用户名/密码认证,下载文件断点续传,上传文件断点续传,http代理服务器管道,甚至它还支持IPv6,scoket5代理服务器,通过http代理服务器上传文件到FTP服务器等等。

本文主要介绍的是php远程请求CURL(爬虫、保存登录状态)的相关内容,下面话不多说了,来一起看看详细的介绍吧

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(),
   '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远程请求CURL(爬虫、保存登录状态)的文章就介绍到这了,更多相关php远程请求CURL(爬虫、保存登录状态)内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

PHP 相关文章推荐
新手学PHP之数据库操作详解及乱码解决!
Jan 02 PHP
PHP+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
Dec 28 PHP
需要注意的几个PHP漏洞小结
Feb 05 PHP
PHP设计模式之解释器模式的深入解析
Jun 13 PHP
php生成Android客户端扫描可登录的二维码
May 13 PHP
分析PHP中单双引号的误区和双引号小隐患
Jul 19 PHP
php  单例模式详细介绍及实现源码
Nov 05 PHP
PHP随机获取未被微信屏蔽的域名(微信域名检测)
Mar 19 PHP
PHP实现通过strace定位故障原因的方法
Apr 29 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
Dec 18 PHP
PHP ElasticSearch做搜索实例讲解
Feb 05 PHP
php在linux环境中如何使用redis详解
Dec 15 PHP
php解析非标准json、非规范json的方式实例
Dec 10 #PHP
PHP连接MySQL数据库三种实现方法
Dec 10 #PHP
discuz论坛更换域名,详细文件修改步骤
Dec 09 #PHP
用php实现分页效果的示例代码
Dec 10 #PHP
PHP笛卡尔积实现原理及代码实例
Dec 09 #PHP
PHP基于进程控制函数实现多线程
Dec 09 #PHP
PHP如何防止用户重复提交表单
Dec 09 #PHP
You might like
对盗链说再见...
2006/10/09 PHP
浅谈php中变量的数据类型判断函数
2017/03/04 PHP
用js实现计算加载页面所用的时间
2010/04/02 Javascript
Javascript 颜色渐变效果的实现代码
2013/10/01 Javascript
解析Javascript小括号“()”的多义性
2013/12/03 Javascript
jQuery实现的图片分组切换焦点图插件
2015/01/06 Javascript
详谈jQuery操纵DOM元素属性 attr()和removeAtrr()方法
2015/01/22 Javascript
node.js [superAgent] 请求使用示例
2015/03/13 Javascript
Javascript实现计算个人所得税
2015/05/10 Javascript
javascript实现数组中的内容随机输出
2015/08/11 Javascript
JavaScript与jQuery实现的闪烁输入效果
2016/02/18 Javascript
Node.js开发教程之基于OnceIO框架实现文件上传和验证功能
2016/11/30 Javascript
[原创]JS基于FileSaver.js插件实现文件保存功能示例
2016/12/08 Javascript
vue中改变选中当前项的显示隐藏或者状态的实现方法
2018/02/08 Javascript
Canvas实现微信红包照片效果
2018/08/21 Javascript
webpack 3.X学习之多页面打包的方法
2018/09/04 Javascript
微信小程序文章详情页面实现代码
2018/09/10 Javascript
JavaScript随机数的组合问题案例分析
2020/05/16 Javascript
vue created钩子函数与mounted钩子函数的用法区别
2020/11/05 Javascript
[48:52]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第一局
2016/02/25 DOTA
[02:07]TI9显影之尘系列 - Vici Gaming
2019/08/20 DOTA
Python Tkinter简单布局实例教程
2014/09/03 Python
轻松理解Python 中的 descriptor
2017/09/15 Python
python2.6.6如何升级到python2.7.14
2018/04/08 Python
Python交互环境下实现输入代码
2018/06/22 Python
基于python代码实现简易滤除数字的方法
2018/07/17 Python
Python logging模块用法示例
2018/08/28 Python
一套C#面试题
2013/10/09 面试题
家长给幼儿园的表扬信
2014/01/09 职场文书
CAD制图人员的自荐信
2014/02/07 职场文书
入党自荐书范文
2014/03/09 职场文书
校园学雷锋活动月总结
2014/03/09 职场文书
关于梦想的演讲稿
2014/05/05 职场文书
物理学专业自荐信
2014/06/11 职场文书
二手房购房意向书
2015/05/09 职场文书
公务员处分决定书
2015/06/25 职场文书