深入理解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+MYSQL 出现乱码的解决方法
Aug 08 PHP
有关JSON以及JSON在PHP中的应用
Apr 09 PHP
LotusPhp笔记之:Logger组件的使用方法
May 06 PHP
PHP程序漏洞产生的原因分析与防范方法说明
Mar 06 PHP
Linux下创建nginx脚本-start、stop、reload…
Aug 03 PHP
PHP中mysqli_affected_rows作用行数返回值分析
Dec 26 PHP
通过修改配置真正解决php文件上传大小限制问题(nginx+php)
Sep 23 PHP
PHP如何将XML转成数组
Apr 04 PHP
浅谈socket同步和异步、阻塞和非阻塞、I/O模型
Dec 15 PHP
PHP7多线程搭建教程
Apr 21 PHP
PHP XML Expat解析器知识点总结
Feb 15 PHP
laravel 解决强制跳转 https的问题
Oct 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
德劲1107的电路分析与打磨
2021/03/02 无线电
基于php socket(fsockopen)的应用实例分析
2013/06/02 PHP
PHP CURL CURLOPT参数说明(curl_setopt)
2013/09/30 PHP
Php header()函数语法及使用代码
2013/11/04 PHP
详解PHP对数组的定义以及数组的创建方法
2015/11/27 PHP
PHP中命名空间的使用例子
2019/03/22 PHP
JS 如何获取radio选中后的值及不选择取radio的值
2013/10/28 Javascript
javascript引擎长时间独占线程造成卡顿的解决方案
2014/12/03 Javascript
jQuery仿天猫实现超炫的加入购物车
2015/05/04 Javascript
jquery简单实现图片切换效果的方法
2015/05/12 Javascript
jQuery实现点击后高亮背景固定显示的菜单效果【附demo源码下载】
2016/09/21 Javascript
使用bootstrapValidator插件进行动态添加表单元素并校验
2016/09/28 Javascript
JS中substring与substr的用法
2016/11/16 Javascript
移动端刮刮乐的实现方式(js+HTML5)
2017/03/23 Javascript
Angular实现预加载延迟模块的示例
2017/10/12 Javascript
vuex中store存储store.commit和store.dispatch的用法
2020/07/24 Javascript
[01:06:12]VP vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
[05:26]TI10典藏宝瓶套装外观展示
2020/07/03 DOTA
Ubuntu下使用python读取doc和docx文档的内容方法
2018/05/08 Python
Python定时任务随机时间执行的实现方法
2019/08/14 Python
python实现的爬取电影下载链接功能示例
2019/08/26 Python
python内置函数sorted()用法深入分析
2019/10/08 Python
如何使用selenium和requests组合实现登录页面
2020/02/03 Python
python encrypt 实现AES加密的实例详解
2020/02/20 Python
HTML5拖拉上传文件的简单实例
2017/01/11 HTML / CSS
美国最大的家庭鞋类零售商之一:Shoe Carnival
2017/10/06 全球购物
最耐用行李箱,一箱永流传:Briggs & Riley(全球终身保修)
2017/12/07 全球购物
理肤泉加拿大官网:La Roche-Posay加拿大
2018/07/06 全球购物
电气自动化大学生求职信
2013/10/16 职场文书
招商业务员岗位职责
2013/12/16 职场文书
出租房屋协议书
2014/09/14 职场文书
毕业答辩开场白范文
2015/05/27 职场文书
动画「进击的巨人」第86话播出感谢绘公开
2022/03/21 日漫
关于JS中的作用域中的问题思考分享
2022/04/06 Javascript
python中的random模块和相关函数详解
2022/04/22 Python
SpringBoot深入分析讲解监听器模式下
2022/07/15 Java/Android