深入理解curl类,可用于模拟get,post和curl下载


Posted in PHP onJune 08, 2013

如下所示:

<?php
class Curl {
 /*
  * get 方式获取访问指定地址
  * @param  string url 要访问的地址
  * @param  string cookie cookie的存放地址,没有则不发送cookie
  * @return string curl_exec()获取的信息
  * @author andy
  **/
 public function get( $url, $cookie='' )
 {
  // 初始化一个cURL会话
  $curl = curl_init($url);
  // 不显示header信息
  curl_setopt($curl, CURLOPT_HEADER, 0);
  // 将 curl_exec()获取的信息以文件流的形式返回,而不是直接输出。
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  // 使用自动跳转
  curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
  if(!empty($cookie)) {
   // 包含cookie数据的文件名,cookie文件的格式可以是Netscape格式,或者只是纯HTTP头部信息存入文件。
   curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie);
  }
  // 自动设置Referer
  curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
  // 执行一个curl会话
  $tmp = curl_exec($curl);
  // 关闭curl会话
  curl_close($curl);
  return $tmp;
 }
 /*
  * post 方式模拟请求指定地址
  * @param  string url 请求的指定地址
  * @param  array  params 请求所带的
  * #patam  string cookie cookie存放地址
  * @return string curl_exec()获取的信息
  * @author andy
  **/
 public function post( $url, $params, $cookie )
 {
  $curl = curl_init($url);
  curl_setopt($curl, CURLOPT_HEADER, 0);
  // 对认证证书来源的检查,0表示阻止对证书的合法性的检查。
  curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
  // 从证书中检查SSL加密算法是否存在
  curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1);
  //模拟用户使用的浏览器,在HTTP请求中包含一个”user-agent”头的字符串。
  curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
  //发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样。
  curl_setopt($curl, CURLOPT_POST, 1);
  // 将 curl_exec()获取的信息以文件流的形式返回,而不是直接输出。
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  // 使用自动跳转
  curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); 
  // 自动设置Referer
  curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
  // Cookie地址
  curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie);
  // 全部数据使用HTTP协议中的"POST"操作来发送。要发送文件,
  // 在文件名前面加上@前缀并使用完整路径。这个参数可以通过urlencoded后的字符串
  // 类似'para1=val1¶2=val2&...'或使用一个以字段名为键值,字段数据为值的数组
  // 如果value是一个数组,Content-Type头将会被设置成multipart/form-data。
  curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($params));
  $result = curl_exec($curl);
  curl_close($curl);
  return $result;
 }
 /**
  * 远程下载
  * @param string $remote 远程图片地址
  * @param string $local 本地保存的地址
  * @param string $cookie cookie地址 可选参数由
  * 于某些网站是需要cookie才能下载网站上的图片的
  * 所以需要加上cookie
  * @return void
  * @author andy
  */
 public function reutersload($remote, $local, $cookie= '') {
  $cp = curl_init($remote);
  $fp = fopen($local,"w");
  curl_setopt($cp, CURLOPT_FILE, $fp);
  curl_setopt($cp, CURLOPT_HEADER, 0);
  if($cookie != '') {
   curl_setopt($cp, CURLOPT_COOKIEFILE, $cookie);
  }
  curl_exec($cp);
  curl_close($cp);
  fclose($fp);
 }
}
PHP 相关文章推荐
Oracle Faq(Oracle的版本)
Oct 09 PHP
PHP生成Flash动画的实现代码
Mar 12 PHP
phpmail类发送邮件函数代码
Feb 20 PHP
PHP下使用CURL方式POST数据至API接口的代码
Feb 14 PHP
解析:使用php mongodb扩展时 需要注意的事项
Jun 18 PHP
destoon实现调用热门关键字的方法
Jul 15 PHP
php可生成缩略图的文件上传类实例
Dec 17 PHP
php生成rss类用法实例
Apr 14 PHP
Yii rules常用规则示例
Mar 15 PHP
Thinkphp3.2实用篇之计算型验证码示例
Feb 09 PHP
Yii2框架加载css和js文件的方法分析
May 25 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
Dec 13 PHP
coreseek 搜索英文的问题详解
Jun 08 #PHP
探讨如何在php168_cms中提取验证码
Jun 08 #PHP
如何使用php绘制在图片上的正余弦曲线
Jun 08 #PHP
基于php常用正则表达式的整理汇总
Jun 08 #PHP
PHP计数器的实现代码
Jun 08 #PHP
使用cookie实现统计访问者登陆次数
Jun 08 #PHP
使用session判断用户登录用户权限(超简单)
Jun 08 #PHP
You might like
PHP 高手之路(二)
2006/10/09 PHP
PHP中的array数组类型分析说明
2010/07/27 PHP
PHP环形链表实现方法示例
2017/09/15 PHP
PHP中的empty、isset、isnull的区别与使用实例
2019/03/22 PHP
非常漂亮的JS代码经典广告
2007/10/21 Javascript
在网页里看flash的trace数据的js类
2009/01/10 Javascript
jquery下动态显示jqGrid以及jqGrid的属性设置容易出现问题的解决方法
2010/10/22 Javascript
JSON.stringify 语法实例讲解
2012/03/14 Javascript
js控制的回到页面顶端goTop的代码实现
2013/03/20 Javascript
通过正则表达式实现表单验证是否为中文
2014/02/18 Javascript
Javascript中的delete操作符详细介绍
2014/06/06 Javascript
jQuery中nextUntil()方法用法实例
2015/01/07 Javascript
jQuery插件slick实现响应式移动端幻灯片图片切换特效
2015/04/12 Javascript
js鼠标跟随运动效果
2017/03/11 Javascript
React Native 截屏组件的示例代码
2017/12/06 Javascript
浅谈Node 调试工具入门教程
2018/03/20 Javascript
微信小程序上传文件到阿里OSS教程
2019/05/20 Javascript
详解vuex的简单todolist例子
2019/07/14 Javascript
JavaScript编写开发动态时钟
2020/07/29 Javascript
[40:10]2015国际邀请赛全明星表演赛
2015/08/07 DOTA
安装Python的web.py框架并从hello world开始编程
2015/04/25 Python
Python3.0中普通方法、类方法和静态方法的比较
2019/05/03 Python
python函数与方法的区别总结
2019/06/23 Python
django的分页器Paginator 从django中导入类
2019/07/25 Python
使用 python pyautogui实现鼠标键盘控制功能
2019/08/04 Python
Python操作Sonqube API获取检测结果并打印过程解析
2019/11/27 Python
Python使用Matlab命令过程解析
2020/06/04 Python
New Era英国官网:美国棒球帽品牌
2018/03/21 全球购物
美国家居装饰网上商店:Lulu & Georgia
2019/09/14 全球购物
Everlast官网:拳击、综合格斗和健身相关的体育用品
2020/08/03 全球购物
计算s=f(f(-1.4))的值
2014/05/06 面试题
New delete 与malloc free 的联系与区别
2013/02/04 面试题
一道写SQL的面试题和答案
2013/11/19 面试题
应急处置方案
2014/06/16 职场文书
党的群众路线教育实践活动教师自我剖析材料
2014/10/09 职场文书
2014年青年志愿者工作总结
2014/12/09 职场文书