深入理解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 相关文章推荐
用PHP编程语言开发动态WAP页面
Oct 09 PHP
笑谈配置,使用Smarty技术
Jan 04 PHP
php实现的MySQL通用查询程序
Mar 11 PHP
在Mac上编译安装PHP7的开发环境
Jul 28 PHP
PHP读取配置文件类实例(可读取ini,yaml,xml等)
Jul 28 PHP
关于PHP中协程和阻塞的一些理解与思考
Aug 11 PHP
php处理抢购类功能的高并发请求
Feb 08 PHP
PHP实现基于3DES算法加密解密字符串示例
Aug 24 PHP
Swoole 5将移除自动添加Event::wait()特性详解
Jul 10 PHP
laravel 配置路由 api和web定义的路由的区别详解
Sep 03 PHP
laravel框架查询数据集转为数组的两种方法
Oct 10 PHP
MacOS下PHP7.1升级到PHP7.4.15的方法
Feb 22 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常用函数总结(数组,字符串,时间,文件操作)
2013/06/27 PHP
php发送post请求的三种方法
2014/02/11 PHP
php获得文件大小和文件创建时间的方法
2015/03/13 PHP
Symfony2使用第三方库Upload制作图片上传实例详解
2016/02/04 PHP
PHP多进程编程总结(推荐)
2016/07/18 PHP
PHP常用函数之根据生日计算年龄功能示例
2019/10/21 PHP
用javascript实现分割提取页面所需内容
2007/05/09 Javascript
JavaScript 使用技巧精萃(.net html
2009/04/25 Javascript
javascript 必知必会之closure
2009/09/21 Javascript
Bootstrap源码学习笔记之bootstrap进度条
2016/12/24 Javascript
移动端web滚动分页的实现方法
2017/05/05 Javascript
vue+swiper实现组件化开发的实例代码
2017/10/26 Javascript
React Native 搭建开发环境的方法步骤
2017/10/30 Javascript
实现div滚动条默认最底部以及默认最右边的示例代码
2017/11/15 Javascript
js如何获取访问IP、地区、当前操作浏览器
2019/07/23 Javascript
vue-resourc发起异步请求的方法
2020/02/11 Javascript
vue+Element-ui实现分页效果
2020/11/15 Javascript
编写Python脚本抓取网络小说来制作自己的阅读器
2015/08/20 Python
Python使用sftp实现上传和下载功能(实例代码)
2017/03/14 Python
Java编程迭代地删除文件夹及其下的所有文件实例
2018/02/10 Python
python读取视频流提取视频帧的两种方法
2020/10/22 Python
Python实现按逗号分隔列表的方法
2018/10/23 Python
用Python将Excel数据导入到SQL Server的例子
2019/08/24 Python
Python3实现mysql连接和数据框的形成(实例代码)
2020/01/17 Python
python 利用toapi库自动生成api
2020/10/19 Python
html5读取本地文件示例代码
2014/04/22 HTML / CSS
法国创作个性化T恤衫和其他定制产品平台:Tostadora
2018/04/08 全球购物
YOOX台湾:意大利奢侈品电商
2018/10/13 全球购物
可以在一个PHP文件里面include另外一个PHP文件两次吗
2015/05/22 面试题
怎样声明接口
2014/09/19 面试题
元旦晚会主持词
2014/03/24 职场文书
园林系毕业生求职信
2014/06/23 职场文书
环境卫生整治简报
2015/07/20 职场文书
志愿者服务宣传标语口号
2015/12/26 职场文书
2016年党员读书月活动总结
2016/04/06 职场文书
详解MySQL 用户权限管理
2021/04/20 MySQL