深入理解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 相关文章推荐
分享8个最佳的代码片段在线测试网站
Jun 29 PHP
Php output buffering缓存及程序缓存深入解析
Jul 15 PHP
PHP中将ip地址转成十进制数的两种实用方法
Aug 15 PHP
PHP中执行MYSQL事务解决数据写入不完整等情况
Jan 07 PHP
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
Jun 19 PHP
PHP分页类集锦
Nov 18 PHP
php自动更新版权信息显示的方法
Jun 19 PHP
详解PHP中的mb_detect_encoding函数使用方法
Aug 18 PHP
学习php设计模式 php实现模板方法模式
Dec 08 PHP
CodeIgniter扩展核心类实例详解
Jan 20 PHP
PHP针对字符串开头和结尾的判断方法
Jul 11 PHP
Netbeans 8.2与PHP相关的新特性介绍
Oct 08 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 向访客和爬虫显示不同的内容
2009/11/09 PHP
PHP按行读取文件时删除换行符的3种方法
2014/05/04 PHP
php自动获取关键字的方法
2015/01/06 PHP
ExtJS 2.2.1的grid控件在ie6中的显示问题
2009/05/04 Javascript
JavaScript Distilled 基础知识与函数
2010/04/07 Javascript
javascript 延迟加载技术(lazyload)简单实现
2011/01/17 Javascript
原生js做的手风琴效果的导航菜单
2013/11/08 Javascript
jquery.Ajax()方法调用Asp.Net后台的方法解析
2014/02/13 Javascript
express的中间件basicAuth详解
2014/12/04 Javascript
Angularjs 滚动加载更多数据
2016/03/17 Javascript
基于JS实现Android,iOS一个手势动画效果
2016/04/27 Javascript
jQuery添加和删除输入文本框标签代码
2016/05/20 Javascript
BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面
2016/08/01 Javascript
AngularJs 指令详解及示例代码
2016/09/01 Javascript
概述jQuery中的ajax方法
2016/12/16 Javascript
浅析vue数据绑定
2017/01/17 Javascript
jQuery实现简单的回到顶部totop功能示例
2017/10/16 jQuery
浅析vue-router原理
2018/10/19 Javascript
使用pm2自动化部署node项目的方法步骤
2019/01/28 Javascript
node.js 基于cheerio的爬虫工具的实现(需要登录权限的爬虫工具)
2019/04/10 Javascript
详解vue-flickity的fullScreen功能实现
2020/04/07 Javascript
[05:39]2014DOTA2国际邀请赛 DK晋级胜者组专访战队国士无双
2014/07/14 DOTA
[59:30]VG vs LGD 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.22
2019/09/05 DOTA
Python解析nginx日志文件
2015/05/11 Python
深入理解Python3中的http.client模块
2017/03/29 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
2019/06/13 Python
python多进程重复加载的解决方式
2019/12/13 Python
Python子进程subpocess原理及用法解析
2020/07/16 Python
HTML5之SVG 2D入门6—视窗坐标系与用户坐标系及变换概述
2013/01/30 HTML / CSS
2014年党员个人工作总结
2014/12/02 职场文书
升职自荐信怎么写
2015/03/05 职场文书
公司老总年会致辞
2015/07/30 职场文书
《梅花魂》教学反思
2016/02/18 职场文书
班组长如何制订适合本班组的工作计划?
2019/07/10 职场文书
Vue.js 带下拉选项的输入框(Textbox with Dropdown)组件
2021/04/17 Vue.js
使用Python开发贪吃蛇游戏 SnakeGame
2022/04/30 Python