PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)


Posted in PHP onDecember 14, 2016

通过curl_setopt()函数可以方便快捷的抓取网页(采集很方便大笑),curl_setopt 是PHP的一个扩展库
    
使用条件:需要在php.ini 中配置开启。(PHP 4 >= 4.0.2)
       //取消下面的注释

extension=php_curl.dll

Linux下面,需要重新编译PHP了,编译时,你需要打开编译参数——在configure命令上加上“?with-curl” 参数。

1、 一个抓取网页的简单案例:

[php] view plain copy print?
// 创建一个新cURL资源 
$ch = curl_init();  
// 设置URL和相应的选项 
curl_setopt($ch, CURLOPT_URL, "http://www.baidu.com/"); 
curl_setopt($ch, CURLOPT_HEADER, false);  
// 抓取URL并把它传递给浏览器 
curl_exec($ch); 
//关闭cURL资源,并且释放系统资源 
curl_close($ch);

2、POST数据案例:

[php] view plain copy print?
// 创建一个新cURL资源 
$ch = curl_init(); 
$data = 'phone='. urlencode($phone); 
// 设置URL和相应的选项 
curl_setopt($ch, CURLOPT_URL, "http://www.post.com/"); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
// 抓取URL并把它传递给浏览器 
curl_exec($ch); 
//关闭cURL资源,并且释放系统资源 
curl_close($ch);

3、关于SSL和Cookie

关于SSL也就是HTTPS协议,你只需要把CURLOPT_URL连接中的http://变成https://就可以了。当然,还有一个参数叫CURLOPT_SSL_VERIFYHOST可以设置为验证站点。

关于Cookie,你需要了解下面三个参数:

  • CURLOPT_COOKIE,在当面的会话中设置一个cookie
  • CURLOPT_COOKIEJAR,当会话结束的时候保存一个Cookie
  • CURLOPT_COOKIEFILE,Cookie的文件。

PS:新浪微博登陆API部分截取(部分我增加了点注释,全当参数翻译下。哈哈) 有兴趣的自己研究,自己挪为己用。嘿嘿

[php] view plain copy print?
/** 
   * Make an HTTP request 
   * 
   * @return string API results 
   * @ignore 
   */ 
  function http($url, $method, $postfields = NULL, $headers = array()) { 
    $this->http_info = array(); 
    $ci = curl_init(); 
    /* Curl settings */ 
    curl_setopt($ci, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);//让cURL自己判断使用哪个版本 
    curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent);//在HTTP请求中包含一个"User-Agent: "头的字符串。 
    curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);//在发起连接前等待的时间,如果设置为0,则无限等待 
    curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);//设置cURL允许执行的最长秒数 
    curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);//返回原生的(Raw)输出 
    curl_setopt($ci, CURLOPT_ENCODING, "");//HTTP请求头中"Accept-Encoding: "的值。支持的编码有"identity","deflate"和"gzip"。如果为空字符串"",请求头会发送所有支持的编码类型。 
    curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);//禁用后cURL将终止从服务端进行验证 
    curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader'));//第一个是cURL的资源句柄,第二个是输出的header数据 
    curl_setopt($ci, CURLOPT_HEADER, FALSE);//启用时会将头文件的信息作为数据流输出 
    switch ($method) { 
      case 'POST': 
        curl_setopt($ci, CURLOPT_POST, TRUE); 
        if (!empty($postfields)) { 
          curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); 
          $this->postdata = $postfields; 
        } 
        break; 
      case 'DELETE': 
        curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE'); 
        if (!empty($postfields)) { 
          $url = "{$url}?{$postfields}"; 
        } 
    } 
    if ( isset($this->access_token) && $this->access_token ) 
      $headers[] = "Authorization: OAuth2 ".$this->access_token; 
    $headers[] = "API-RemoteIP: " . $_SERVER['REMOTE_ADDR']; 
    curl_setopt($ci, CURLOPT_URL, $url ); 
    curl_setopt($ci, CURLOPT_HTTPHEADER, $headers ); 
    curl_setopt($ci, CURLINFO_HEADER_OUT, TRUE ); 
    $response = curl_exec($ci); 
    $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE); 
    $this->http_info = array_merge($this->http_info, curl_getinfo($ci)); 
    $this->url = $url; 
    if ($this->debug) { 
      echo "=====post data======\r\n"; 
      var_dump($postfields); 
 
      echo '=====info====='."\r\n"; 
      print_r( curl_getinfo($ci) ); 
 
      echo '=====$response====='."\r\n"; 
      print_r( $response ); 
    } 
    curl_close ($ci); 
    return $response; 
  }

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

PHP 相关文章推荐
怎么使 Mysql 数据同步
Oct 09 PHP
用PHP函数解决SQL injection
Dec 09 PHP
不错的PHP学习之php4与php5之间会穿梭一点点感悟
May 03 PHP
php中设置多级目录session的问题
Aug 08 PHP
PHP实现把文本中的URL转换为链接的auolink()函数分享
Jul 29 PHP
php json转换成数组形式代码分享
Nov 10 PHP
php 数组随机取值的简单实例
May 23 PHP
thinkPHP订单数字提醒功能的实现方法
Dec 01 PHP
PHP实现的登录页面信息提示功能示例
Jul 24 PHP
PHP命名空间namespace及use的简单用法分析
Aug 03 PHP
PHP信号处理机制的操作代码讲解
Apr 19 PHP
基于PHP实现邮箱验证激活过程详解
Oct 28 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
Dec 14 #PHP
Thinkphp 中 distinct 的用法解析
Dec 14 #PHP
PHP 500报错的快速解决方法
Dec 14 #PHP
php json中文编码为null的解决办法
Dec 14 #PHP
PHP正则匹配日期和时间(时间戳转换)的实例代码
Dec 14 #PHP
Thinkphp整合微信支付功能
Dec 14 #PHP
php判断是否连接上网络的方法实例详解
Dec 14 #PHP
You might like
PHP 设置MySQL连接字符集的方法
2011/01/02 PHP
转一个日期输入控件,支持FF
2007/04/27 Javascript
JavaScript URL参数读取改进版
2009/01/16 Javascript
jQuery $.each的用法说明
2010/03/22 Javascript
javascript数组去掉重复
2011/05/12 Javascript
js实现无缝滚动特效
2015/12/20 Javascript
Javascript 6里的4个新语法
2016/08/25 Javascript
适用于手机端的jQuery图片滑块动画
2016/12/09 Javascript
jQuery实现form表单序列化转换为json对象功能示例
2018/05/23 jQuery
vue异步axios获取的数据渲染到页面的方法
2018/08/09 Javascript
vue2实现搜索结果中的搜索关键字高亮的代码
2018/08/29 Javascript
jQuery 同时获取多个标签的指定内容并储存为数组
2018/11/20 jQuery
highCharts提示框中显示当前时间的方法
2019/01/18 Javascript
聊聊Vue 中 title 的动态修改问题
2019/06/11 Javascript
原生js实现自定义滚动条组件
2021/01/20 Javascript
[00:47]DOTA2荣耀之路6:天火,天火!
2018/05/30 DOTA
一个超级简单的python web程序
2014/09/11 Python
Python使用defaultdict读取文件各列的方法
2017/05/11 Python
Python代码打开本地.mp4格式文件的方法
2019/01/03 Python
Python代码太长换行的实现
2019/07/05 Python
在Python中使用MongoEngine操作数据库教程实例
2019/12/03 Python
Python文件操作函数用法实例详解
2019/12/24 Python
python实现五子棋游戏(pygame版)
2020/01/19 Python
Python递归函数特点及原理解析
2020/03/04 Python
Python 如何批量更新已安装的库
2020/05/26 Python
Python全局变量与global关键字常见错误解决方案
2020/10/05 Python
Python 用__new__方法实现单例的操作
2020/12/11 Python
独特的礼品和创新的科技产品:The Grommet
2018/02/24 全球购物
加拿大拼图大师:Puzzle Master
2020/12/28 全球购物
介绍一下Make? 为什么使用make
2016/07/31 面试题
矫正人员思想汇报
2014/01/08 职场文书
大二自我鉴定
2014/01/31 职场文书
最经典的商业地产项目广告词
2014/03/13 职场文书
互联网创业计划书写作技巧攻略
2014/03/23 职场文书
西安事变观后感
2015/06/12 职场文书
多线程Spring通过@Scheduled实现定时任务
2022/05/25 Java/Android