深入理解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 相关文章推荐
同时提取多条新闻中的文本一例
Oct 09 PHP
php下获取Discuz论坛登录用户名、用户组、用户ID等信息的实现代码
Dec 29 PHP
php压缩多个CSS为一个css的代码并缓存
Apr 21 PHP
PHP实现WebService的简单示例和实现步骤
Mar 27 PHP
列举PHP的Yii 2框架的开发优势
Jul 03 PHP
yii的入口文件index.php中为什么会有这两句
Aug 04 PHP
微信封装的调用微信签名包的类库
Jun 08 PHP
PHP使用PDO抽象层获取查询结果的方法示例
May 10 PHP
php无限级分类实现评论及回复功能
Feb 18 PHP
Laravel如何自定义command命令浅析
Mar 23 PHP
Yii框架自定义数据库操作组件示例
Nov 11 PHP
基于PHP实现堆排序原理及实例详解
Jun 19 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 SEO优化之URL优化方法
2011/04/21 PHP
php 不使用js实现页面跳转
2014/02/11 PHP
php结合ajax实现手机发红包的案例
2016/10/13 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
2019/10/11 PHP
jQuery EasyUI API 中文文档 - ComboBox组合框
2011/10/07 Javascript
jcrop基本参数一览
2013/07/16 Javascript
JavaScript前端图片加载管理器imagepool使用详解
2014/12/29 Javascript
使用vue.js开发时一些注意事项
2016/04/27 Javascript
省市选择的简单实现(基于zepto.js)
2016/06/21 Javascript
全面了解JS中的匿名函数
2016/06/29 Javascript
js replace(a,b)之替换字符串中所有指定字符的方法
2016/08/17 Javascript
详解XMLHttpRequest(二)响应属性、二进制数据、监测上传下载进度
2016/09/14 Javascript
微信小程序 Record API详解及实例代码
2016/09/30 Javascript
node.js实现回调的方法示例
2017/03/01 Javascript
Node.js的Koa实现JWT用户认证方法
2018/05/05 Javascript
create-react-app安装出错问题解决方法
2018/09/04 Javascript
Javascript数组方法reduce的妙用之处分享
2019/06/10 Javascript
Python中的模块和包概念介绍
2015/04/13 Python
python统计cpu利用率的方法
2015/06/02 Python
代码实例讲解python3的编码问题
2019/07/08 Python
pyqt5、qtdesigner安装和环境设置教程
2019/09/25 Python
Python 实现opencv所使用的图片格式与 base64 转换
2020/01/09 Python
python实现在一个画布上画多个子图
2020/01/19 Python
HTML5中的nav标签学习笔记
2016/06/24 HTML / CSS
美国Jeep配件购物网站:Morris 4×4 Center
2019/05/01 全球购物
eBay爱尔兰站:eBay.ie
2019/08/09 全球购物
日本最大的购物网站:日本乐天市场(Rakuten Ichiba)
2020/11/04 全球购物
美国轻奢时尚购物网站:REVOLVE(支持中文)
2020/07/18 全球购物
自我鉴定注意事项
2014/01/19 职场文书
科级干部群众路线教育实践活动对照检查材料思想汇报
2014/09/20 职场文书
乡村教师党员四风问题对照检查材料思想汇报
2014/10/08 职场文书
离婚协议书格式范本
2016/03/18 职场文书
原来实习报告是这样写的呀!
2019/07/03 职场文书
django注册用邮箱发送验证码的实现
2021/04/18 Python
springboot项目以jar包运行的操作方法
2021/06/30 Java/Android
Redis+Lua脚本实现计数器接口防刷功能(升级版)
2022/02/12 Redis