注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

phperwuhan的博客

记载一个phper的历程!phperwuhan.blog.163.com

 
 
 

日志

 
 

php curl功能小结  

2010-01-29 17:00:07|  分类: php |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

来源:http://lzyy.org/blog/archives/95

curl就像一个命令行的浏览器,非常强大。不过由于参数比较复杂,也不方便记忆,于是写了个wrapper,方便使用(在文章的最后)。

简要概括起来,curl的功能其实就是获取数据和提交数据,在获取数据方面,如果处理量不是太大的话,file_get_contents就完全可以胜任,使用起来也更加简单(如果要对获取的数据进一步处理,可以考虑使用yql)。比如:

// get web content  echo Robot::instance()->exec('http://www.google.com/');  echo file_get_contents('http://www.google.com/')     // get image(or other file)  Robot::instance()->saveto('test.gif')->exec('http://www.google.com/intl/en_ALL/images/logo.gif');  file_put_contents('test.gif',file_get_contents('http://www.google.com/intl/en_ALL/images/logo.gif'));

所以获取数据不是curl的看家本领,提交数据才是它的拿手好戏。

 

post数据

比如自动登录wordpress

$username="admin";  $password="123456";  $url="http://localhost/os_projects/wordpress/wp-login.php";  $cookie="cookie.txt";  $postdata = "log=". $username ."&pwd=". $password ."&wp-submit=Log%20In&redirect_to=http://localhost/os_projects/wordpress/wp-admin/&testcookie=1";     echo Robot::instance()->post($postdata)->cookie($cookie)->exec($url);

既然可以post数据,那么登录、发布之类的操作都可以通过curl来执行,如发布wordpress文章,发布tweet等等

上传文件

// append @ before file  $postdata = array('username'=>'lzyy','avatar'=>'@/home/lzyy/avatar.png');  $url = 'http://domain.com/user.php';  echo Robot::instance()->post($postdata)->exec($url);

这个可以用来测试网速哦

 

当然curl还可以做很多别的事,常用的就是这些了。也可以体验一下curl客户端,这里有详细的使用说明和演示

演示里用到的curl类

<?php  /**   * usage   *   * $result = Robot::instance()   * ->post(array('username'=>'lzyy','password'=>'123456'))   * ->cookie('cookie.txt')   * ->exec('http://www.example.com/user');   * echo $result;   */  class Robot   {   private $_ch;   private static $_instance;   public function __construct()   {    $userAgent = 'Googlebot/2.1 (http://www.googlebot.com/bot.html)';    $this->_ch = curl_init();    curl_setopt($this->_ch, CURLOPT_USERAGENT, $userAgent);    curl_setopt($this->_ch, CURLOPT_FAILONERROR, true);    curl_setopt($this->_ch, CURLOPT_FOLLOWLOCATION, true);    curl_setopt($this->_ch, CURLOPT_AUTOREFERER, true);    curl_setopt($this->_ch, CURLOPT_REFERER, 'http://www.google.com');     curl_setopt($this->_ch, CURLOPT_RETURNTRANSFER,true);    curl_setopt($this->_ch, CURLOPT_TIMEOUT, 30);   }      public static function instance()   {    if(empty(self::$_instance))    {     self::$_instance = new Robot();    }    return self::$_instance;   }      /**    * data to post , also can upload file    * example: $data = array('username'=>'lzyy','avatar'=>'@/home/lzyy/avatar.png')    */   public function post($data)   {    curl_setopt($this->_ch,CURLOPT_POST,1);    curl_setopt($this->_ch,CURLOPT_POSTFIELDS,$data);    return $this;   }      public function cookie($file)   {    curl_setopt($this->_ch,CURLOPT_COOKIEFILE,$file);    curl_setopt($this->_ch,CURLOPT_COOKIEJAR,$file);    return $this;   }      public function referer($url)   {    curl_setopt($this->_ch,CURLOPT_REFERER,$url);    return $this;   }      /**    * save downloaded content to $file    */   public function saveto($file)   {    curl_setopt($this->_ch,CURLOPT_FILE,$file);    return $this;   }      /**    * set custom option    */   public function setopt($key,$val)   {    curl_setopt($this->_ch,$key,$val);    return $this;   }      public function exec($target_url)   {    curl_setopt($this->_ch, CURLOPT_URL,$target_url);    $result = curl_exec($this->_ch);    return $result;   }     }
  评论这张
 
阅读(623)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017