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 相关文章推荐
快速开发一个PHP扩展图文教程
Dec 12 PHP
PHPwind整合最土系统用户同步登录实现方法
Dec 08 PHP
php加密解密实用类分享
Jan 07 PHP
PHP使用Session遇到的一个Permission denied Notice解决办法
Jul 30 PHP
Thinkphp中数据按分类嵌套循环实现方法
Oct 30 PHP
PHP+MySQL删除操作实例
Jan 21 PHP
php实现RSA加密类实例
Mar 26 PHP
PHP配置把错误日志以邮件方式发送方法(Windows系统)
Jun 23 PHP
PHP实现时间比较和时间差计算的方法示例
Jul 24 PHP
Laravel框架用户登陆身份验证实现方法详解
Sep 14 PHP
如何让PHP编码更加好看利于阅读
May 12 PHP
php多进程并发编程防止出现僵尸进程的方法分析
Feb 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中的数组操作函数整理
2008/08/18 PHP
PHP小技巧之函数重载
2014/06/02 PHP
php操作memcache缓存方法分享
2015/06/03 PHP
Add a Table to a Word Document
2007/06/15 Javascript
javascript String 对象
2008/04/25 Javascript
jQuery入门知识简介
2010/03/04 Javascript
js简单实现HTML标签Select联动带跳转
2013/10/23 Javascript
jQuery中die()方法用法实例
2015/01/19 Javascript
JavaScript学习笔记之Cookie对象
2015/01/22 Javascript
JavaScript操作XML/HTML比较常用的对象属性集锦
2015/10/30 Javascript
Mac下使用charles遇到的问题以及解决办法
2017/01/10 Javascript
jquery横向纵向鼠标滚轮全屏切换
2017/02/27 Javascript
jQuery remove()过滤被删除的元素(推荐)
2017/07/18 jQuery
vue-cli脚手架build目录下utils.js工具配置文件详解
2018/09/14 Javascript
jquery实现动态添加附件功能
2018/10/23 jQuery
微信小程序可滑动周日历组件使用详解
2019/10/21 Javascript
vue基本使用--refs获取组件或元素的实例
2019/11/07 Javascript
Vue页面切换和a链接的本质区别详解
2019/11/12 Javascript
[01:10:16]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第一局
2016/02/27 DOTA
Python缩进和冒号详解
2016/06/01 Python
非递归的输出1-N的全排列实例(推荐)
2017/04/11 Python
Django中针对基于类的视图添加csrf_exempt实例代码
2018/02/11 Python
Python zip()函数用法实例分析
2018/03/17 Python
python读取文件名称生成list的方法
2018/04/27 Python
Python模拟自动存取款机的查询、存取款、修改密码等操作
2018/09/02 Python
基于Python的Post请求数据爬取的方法详解
2019/06/14 Python
PyQt5重写QComboBox的鼠标点击事件方法
2019/06/25 Python
在脚本中单独使用django的ORM模型详解
2020/04/01 Python
Keras实现支持masking的Flatten层代码
2020/06/16 Python
Python实现定时监测网站运行状态的示例代码
2020/09/30 Python
Python3+Django get/post请求实现教程详解
2021/02/16 Python
中学生自我鉴定
2014/02/04 职场文书
酒店总经理职务说明书
2014/02/26 职场文书
对公司合理化的建议书
2014/03/12 职场文书
机械制造专业大学生自我鉴定
2014/09/19 职场文书
同学聚会开幕词
2019/04/02 职场文书