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和ACCESS写聊天室(一)
Oct 09 PHP
zend api扩展的php对象的autoload工具
Apr 18 PHP
PHP在字符断点处截断文字的实现代码
Apr 21 PHP
dhtmlxTree目录树增加右键菜单以及拖拽排序的实现方法
Apr 26 PHP
php设计模式之观察者模式的应用详解
May 21 PHP
table标签的结构与合并单元格的实现方法
Jul 24 PHP
MongoDB在PHP中的常用操作小结
Feb 20 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
Mar 25 PHP
PHP6连接SQLServer2005的三部曲
Apr 15 PHP
老生常谈PHP 文件写入和读取(必看篇)
May 22 PHP
thinkphp框架page类与bootstrap分页(美化)
Jun 25 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
Nov 12 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
PHP操作数组的一些函数整理介绍
2011/07/17 PHP
PHP实现单例模式最安全的做法
2014/06/13 PHP
ThinkPHP连接数据库及主从数据库的设置教程
2014/08/22 PHP
php session 写入数据库
2016/02/13 PHP
javascript十个最常用的自定义函数(中文版)
2009/09/07 Javascript
javascript 数据类型转换(parseInt,parseFloat)
2010/07/20 Javascript
javascript innerHTML使用分析
2010/12/03 Javascript
Jquery操作下拉框(DropDownList)实现取值赋值
2013/08/13 Javascript
Javascript浮点数乘积运算出现多位小数的解决方法
2014/02/17 Javascript
JS高级调试技巧:捕获和分析 JavaScript Error详解
2014/03/16 Javascript
jQuery右侧选项卡焦点图片轮播特效代码分享
2015/09/05 Javascript
利用yarn实现一个webpack+react种子
2016/10/25 Javascript
微信小程序 UI与容器组件总结
2017/02/21 Javascript
vuejs使用递归组件实现树形目录的方法
2017/09/30 Javascript
基于vue-simplemde实现图片拖拽、粘贴功能
2018/04/12 Javascript
vue项目中使用tinymce编辑器的步骤详解
2018/09/11 Javascript
js变量声明var使用与不使用的区别详解
2019/01/21 Javascript
在Vue mounted方法中使用data变量详解
2019/11/05 Javascript
JS+canvas五子棋人机对战实现步骤详解
2020/06/04 Javascript
[02:09:59]火猫TV国士无双dota2 6.82版本详解(下)
2014/09/29 DOTA
Django跨域请求问题的解决方法示例
2018/06/16 Python
Python实现监控键盘鼠标操作示例【基于pyHook与pythoncom模块】
2018/09/04 Python
PyQtGraph在pyqt中的应用及安装过程
2019/08/04 Python
Python 字符串处理特殊空格\xc2\xa0\t\n Non-breaking space
2020/02/23 Python
HTML5 解析规则分析
2009/08/14 HTML / CSS
电子信息专业学生自荐信
2013/11/09 职场文书
学习十八大精神心得体会
2013/12/31 职场文书
抗洪抢险事迹材料
2014/05/06 职场文书
关于青春的演讲稿三分钟
2014/08/22 职场文书
小学校园广播稿集锦
2014/10/04 职场文书
2014年医务科工作总结
2014/12/18 职场文书
教师节慰问信
2015/02/15 职场文书
2015年勤工助学工作总结
2015/04/29 职场文书
休假证明书
2015/06/24 职场文书
Win11应用商店打开闪退怎么解决? win11应用商店打不开的多种解决办法
2022/04/05 数码科技
《游戏王:大师决斗》新活动上线 若无符合卡组可免费租用
2022/04/13 其他游戏