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 和 MySQL 开发的 8 个技巧
Oct 09 PHP
php 需要掌握的东西 不做浮躁的人
Dec 28 PHP
php下目前为目最全的CURL中文说明
Aug 01 PHP
destoon调用discuz论坛中带图片帖子的实现方法
Aug 21 PHP
Windows下的PHP安装pear教程
Oct 24 PHP
摘自织梦CMS中的图片处理类
Aug 08 PHP
PHP实现补齐关闭的HTML标签
Mar 22 PHP
php中文字符串截取多种方法汇总
Oct 06 PHP
php fseek函数读取大文件两种方法
Oct 12 PHP
thinkphp 抓取网站的内容并且保存到本地的实例详解
Aug 25 PHP
微信推送功能实现方式图文详解
Jul 12 PHP
Laravel实现搜索的时候分页并携带参数
Oct 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
PHP反射机制原理与用法详解
2017/02/15 PHP
在TP5数据库中四个字段实现无限分类的示例
2019/10/18 PHP
PHP实现文件上传操作和封装
2020/03/04 PHP
javascript中的缓动效果实现程序
2012/12/29 Javascript
使用Math.floor与Math.random取随机整数的方法详解
2013/05/07 Javascript
JavaScript动态创建div属性和样式示例代码
2013/10/09 Javascript
使用angularjs创建简单表格
2016/01/21 Javascript
js判断数组key是否存在(不用循环)的简单实例
2016/08/03 Javascript
微信小程序 Tab页切换更新数据
2017/01/05 Javascript
js获取地址栏中传递的参数(两种方法)
2017/02/08 Javascript
Vue Cli与BootStrap结合实现表格分页功能
2017/08/18 Javascript
Vue0.1的过滤代码如何添加到Vue2.0直接使用
2017/08/23 Javascript
修改Nodejs内置的npm默认配置路径方法
2018/05/13 NodeJs
vue超时计算的组件实例代码
2018/07/09 Javascript
分享vue里swiper的一些坑
2018/08/30 Javascript
JS实现盒子跟着鼠标移动及键盘方向键控制盒子移动效果示例
2019/01/29 Javascript
vue2.0+vue-router构建一个简单的列表页的示例代码
2019/02/13 Javascript
[34:56]Ti4冒泡赛LGD vs Liquid 1
2014/07/14 DOTA
python批量制作雷达图的实现方法
2016/07/26 Python
Python字典实现简单的三级菜单(实例讲解)
2017/07/31 Python
Python+numpy实现矩阵的行列扩展方式
2019/11/29 Python
.dcm格式文件软件读取及python处理详解
2020/01/16 Python
基于python实现获取网页图片过程解析
2020/05/11 Python
python实现感知机模型的示例
2020/09/30 Python
input元素的url类型和email类型简介
2012/07/11 HTML / CSS
HTML5 虚拟键盘出现挡住输入框的解决办法
2017/02/14 HTML / CSS
美国最大的存储市场:SpareFoot
2018/07/23 全球购物
2014年居委会工作总结
2014/12/09 职场文书
离婚协议书样本
2015/01/26 职场文书
行政复议决定书
2015/06/24 职场文书
复制别人的成功真的会成功吗?
2019/10/17 职场文书
Python中X[:,0]和X[:,1]的用法
2021/05/10 Python
小程序实现文字循环滚动动画
2021/06/14 Javascript
opencv用VS2013调试时用Image Watch插件查看图片
2021/07/26 Python
MySQL的InnoDB存储引擎的数据页结构详解
2022/03/03 MySQL
python中validators库的使用方法详解
2022/09/23 Python