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 相关文章推荐
第十三节--对象串行化
Nov 16 PHP
PHP伪静态写法附代码
Jun 20 PHP
PHP开启opcache提升代码性能
Apr 26 PHP
php获取从百度、谷歌等搜索引擎进入网站关键词的方法
Jul 08 PHP
php删除数组中重复元素的方法
Dec 22 PHP
yii实现model添加默认值的方法(2种方法)
Jan 06 PHP
PHP实现清除MySQL死连接的方法
Jul 23 PHP
ThinkPHP实现图片上传操作的方法详解
May 08 PHP
YII框架常用技巧总结
Apr 27 PHP
PHP抽象类与接口的区别实例详解
May 09 PHP
Laravel 修改默认日志文件名称和位置的例子
Oct 17 PHP
laravel框架中间件简单使用方法示例
Jan 25 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 时间计算问题小结
2009/01/04 PHP
php 进度条实现代码
2009/03/10 PHP
jQuery+php实现ajax文件即时上传的详解
2013/06/17 PHP
一个收集图片的bookmarlet(js 刷新页面中的图片)
2010/05/27 Javascript
ExtJs Excel导出并下载IIS服务器端遇到的问题
2011/09/16 Javascript
基于jQuery捕获超链接事件进行局部刷新代码
2012/05/10 Javascript
javascript学习笔记(十二) RegExp类型介绍
2012/06/20 Javascript
js使用数组判断提交数据是否存在相同数据
2013/11/27 Javascript
JS和函数式语言的三特性
2014/03/05 Javascript
JavaScript框架(iframe)操作总结
2014/04/16 Javascript
alert和confirm功能介绍
2014/05/21 Javascript
使用jquery动态加载js文件的方法
2014/12/24 Javascript
jquery中attr和prop的区别分析
2015/03/16 Javascript
JavaScript实现的圆形浮动标签云效果实例
2015/08/06 Javascript
Vue.js学习笔记之 helloworld
2016/08/14 Javascript
深入理解选择框脚本[推荐]
2016/12/13 Javascript
jQuery Masonry瀑布流布局神器使用详解
2017/05/25 jQuery
详述 Sublime Text 打开 GBK 格式中文乱码的解决方法
2017/10/26 Javascript
手写简单的jQuery雪花飘落效果实例
2018/04/22 jQuery
使用JavaScript中的lodash编写双色球效果
2018/06/24 Javascript
手挽手带你学React之React-router4.x的使用
2019/02/14 Javascript
JavaScript实现页面中录音功能的方法
2019/06/04 Javascript
layui实现数据分页功能(ajax异步)
2019/07/27 Javascript
如何基于javascript实现贪吃蛇游戏
2020/02/09 Javascript
Element InputNumber 计数器的实现示例
2020/08/03 Javascript
[09:43]DOTA2每周TOP10 精彩击杀集锦vol.5
2014/06/25 DOTA
python递归查询菜单并转换成json实例
2017/03/27 Python
python爬虫获取多页天涯帖子
2018/02/23 Python
详解centos7+django+python3+mysql+阿里云部署项目全流程
2019/11/15 Python
OpenCV读取与写入图片的实现
2020/10/13 Python
详解基于python的图像Gabor变换及特征提取
2020/10/26 Python
const char*, char const*, char*const的区别是什么
2014/07/09 面试题
大学生工作推荐信范文
2013/12/02 职场文书
物流仓管员工作职责
2014/01/06 职场文书
导游词之蓬莱长岛
2019/12/17 职场文书
《极主夫道》真人电影正式预告 定档6月3日上映
2022/04/05 日漫