深入理解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配置心得包含MYSQL5乱码解决
Nov 20 PHP
php中目录,文件操作详谈
Mar 19 PHP
PHP学习散记_编码(json_encode 中文不显示)
Nov 10 PHP
PHP提交表单失败后如何保留已经填写的信息
Jun 20 PHP
PHP反向代理类代码
Aug 15 PHP
php基于websocket搭建简易聊天室实践
Oct 24 PHP
php微信公众号js-sdk开发应用
Nov 28 PHP
thinkphp修改配置进入默认首页的方法
Feb 07 PHP
PHP如何读取由JavaScript设置的Cookie
Mar 22 PHP
PHP模糊查询技术实例分析【附源码下载】
Mar 07 PHP
PHP连续签到功能实现方法详解
Dec 04 PHP
win10下 php安装seaslog扩展的详细步骤
Dec 04 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
日本十大惊悚动漫
2020/03/04 日漫
php中防止恶意刷新页面的代码小结
2012/10/31 PHP
深入HTTP响应状态码速查表的详解
2013/06/07 PHP
Smarty foreach控制循环次数的实现详解
2013/07/03 PHP
PHP利用str_replace防注入的方法
2013/11/10 PHP
php实现在服务器上创建目录的方法
2015/03/16 PHP
详解PHP使用日期时间处理器Carbon人性化显示时间
2017/08/10 PHP
laravel 实现关闭CSRF(全部关闭、部分关闭)
2019/10/21 PHP
js字符串转换成xml对象并使用技巧解读
2013/04/18 Javascript
JS将秒换成时分秒实现代码
2013/09/03 Javascript
JS实现将人民币金额转换为大写的示例代码
2014/02/13 Javascript
javascript版的in_array函数(判断数组中是否存在特定值)
2014/05/09 Javascript
Node.js编码规范
2014/07/14 Javascript
jQuery实现切换页面过渡动画效果
2015/10/29 Javascript
使用 stylelint检查CSS_StyleLint
2016/04/28 Javascript
Javascript中document.referrer隐藏来源的方法
2017/01/16 Javascript
js+html5实现侧滑页面效果
2017/07/15 Javascript
微信小程序url与token设置详解
2017/09/26 Javascript
js 数组详细操作方法及解析合集
2018/06/01 Javascript
浅谈React之状态(State)
2018/09/19 Javascript
jQuery实现鼠标滑动切换图片
2020/05/27 jQuery
Vue使用Three.js加载glTF模型的方法详解
2020/06/14 Javascript
[06:04]DOTA2国际邀请赛纪录片:Just For LGD
2013/08/11 DOTA
[51:34]Ti4主赛事胜者组 DK vs EG 2
2014/07/19 DOTA
python各种语言间时间的转化实现代码
2016/03/23 Python
Python用threading实现多线程详解
2017/02/03 Python
Python元组知识点总结
2019/02/18 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
2020/02/11 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
2020/10/30 Python
Mavi牛仔裤美国官网:土耳其著名牛仔品牌
2016/09/24 全球购物
塔吉特百货公司官网:Target
2017/04/27 全球购物
PHP如何与mysql建立链接
2013/05/05 面试题
药品业务员岗位职责
2014/04/17 职场文书
《风娃娃》教学反思
2014/04/19 职场文书
天堂的孩子观后感
2015/06/11 职场文书
研究生学习计划书应该怎么写?
2019/09/10 职场文书