深入理解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 相关文章推荐
40个迹象表明你还是PHP菜鸟
Sep 29 PHP
php中3种方法统计字符串中每种字符的个数并排序
Aug 27 PHP
Linux下CoreSeek及PHP扩展模块的安装
Sep 23 PHP
解析PHP将对象转换成数组的方法(兼容多维数组类型)
Jun 21 PHP
PHP抓屏函数实现屏幕快照代码分享
Jan 02 PHP
php获取从百度、谷歌等搜索引擎进入网站关键词的方法
Jul 08 PHP
PHP实现的简单缓存类
Jul 29 PHP
PHP微信分享开发详解
Jan 14 PHP
thinkPHP+phpexcel实现excel报表输出功能示例
Jun 06 PHP
浅谈Yii乐观锁的使用及原理
Jul 25 PHP
PHP简单实现二维数组赋值与遍历功能示例
Oct 19 PHP
PHP simplexml_load_string()函数实例讲解
Feb 03 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字符串word末字符实现大小写互换的方法
2014/11/10 PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
2015/07/29 PHP
thinkPHP5.0框架简单配置作用域的方法
2017/03/17 PHP
打开超链需要“确认”对话框的方法
2007/03/08 Javascript
jQuery Ajax使用 全解析
2010/12/15 Javascript
让js弹出窗口居前显示的实现方法
2013/07/10 Javascript
js获取或设置当前窗口url参数的小例子
2013/10/14 Javascript
html文件中jquery与velocity变量中的$冲突的解决方法
2013/11/01 Javascript
javascript中处理时间戳为日期格式的方法
2014/01/02 Javascript
jquery实现仿新浪微博带动画效果弹出层代码(可关闭、可拖动)
2015/10/12 Javascript
详解页面滚动值scrollTop在FireFox与Chrome浏览器间的兼容问题
2015/12/03 Javascript
php基于redis处理session的方法
2016/03/14 Javascript
javascript代码调试之console.log 用法图文详解
2016/09/30 Javascript
Angular4 中常用的指令入门总结
2017/06/12 Javascript
微信小程序 共用变量值的实现
2017/07/12 Javascript
js canvas实现简单的图像扩散效果
2020/06/28 Javascript
jQuery选择器中的特殊符号处理方法
2017/09/08 jQuery
vuex操作state对象的实例代码
2018/04/25 Javascript
详解vue 项目白屏解决方案
2018/10/31 Javascript
Js和VUE实现跑马灯效果
2020/05/25 Javascript
使用webpack和rollup打包组件库的方法
2021/02/25 Javascript
pygame学习笔记(2):画点的三种方法和动画实例
2015/04/15 Python
Python中字符串的格式化方法小结
2016/05/03 Python
python添加模块搜索路径方法
2017/09/11 Python
Python pyinotify日志监控系统处理日志的方法
2018/03/08 Python
python画柱状图--不同颜色并显示数值的方法
2018/12/13 Python
Python字典中的值为列表或字典的构造实例
2019/12/16 Python
Django的CVB实例详解
2020/02/10 Python
Python处理PDF与CDF实例
2020/02/26 Python
基于TensorFlow的CNN实现Mnist手写数字识别
2020/06/17 Python
如何在Anaconda中打开python自带idle
2020/09/21 Python
利用Python实现学生信息管理系统的完整实例
2020/12/30 Python
个人教师自我评价范文
2013/12/02 职场文书
童年读书笔记
2015/06/26 职场文书
JS监听Esc 键触发事键
2021/04/14 Javascript
MySQL数据库索引的最左匹配原则
2021/11/20 MySQL