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生成自己的LOG文件
Oct 09 PHP
PHP stristr() 函数(不区分大小写的字符串查找)
Jun 03 PHP
PHP实例分享判断客户端是否使用代理服务器及其匿名级别
Jun 04 PHP
php生成excel列名超过26列大于Z时的解决方法
Dec 29 PHP
laravel容器延迟加载以及auth扩展详解
Mar 02 PHP
利用PHP如何实现Socket服务器
Sep 23 PHP
PHP使用Mysqli类库实现完美分页效果的方法
Apr 07 PHP
php根据数据id自动生成编号的实现方法
Oct 16 PHP
PHP实现大数(浮点数)取余的方法
Feb 18 PHP
PHP实现验证码校验功能
Nov 16 PHP
php框架CodeIgniter使用redis的方法分析
Apr 13 PHP
在laravel中使用with实现动态添加where条件
Oct 10 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
微信公众平台实现获取用户OpenID的方法
2015/04/15 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
2015/12/23 PHP
php mysql 封装类实例代码
2016/09/18 PHP
php的优点总结 php有哪些优点
2019/07/19 PHP
动手学习无线电
2021/03/10 无线电
学习ExtJS(二) Button常用方法
2009/10/07 Javascript
JavaScript Tips 使用DocumentFragment加快DOM渲染速度
2010/06/28 Javascript
统计jQuery中各字符串出现次数的工具
2012/05/03 Javascript
JS实现DIV容器赋值的方法
2015/12/14 Javascript
浅谈javascript运算符——条件,逗号,赋值,()和void运算符
2016/07/15 Javascript
使用Vue.js创建一个时间跟踪的单页应用
2016/11/28 Javascript
Vue 中的受控与非受控组件的实现
2018/12/17 Javascript
elementUI select组件默认选中效果实现的方法
2019/03/25 Javascript
解决vue 表格table列求和的问题
2019/11/06 Javascript
JavaScript代码模拟鼠标自动点击事件示例
2020/08/07 Javascript
Python List列表对象内置方法实例详解
2019/10/22 Python
pytorch 准备、训练和测试自己的图片数据的方法
2020/01/10 Python
Tensorflow的梯度异步更新示例
2020/01/23 Python
PyTorch笔记之scatter()函数的使用
2020/02/12 Python
Python faker生成器生成虚拟数据代码实例
2020/07/20 Python
总结Pyinstaller的坑及终极解决方法(小结)
2020/09/21 Python
python把一个字符串切开的实例方法
2020/09/27 Python
Python识别验证码的实现示例
2020/09/30 Python
Python基于unittest实现测试用例执行
2020/11/25 Python
利用python爬取有道词典的方法
2020/12/08 Python
java关于string最常出现的面试题整理
2021/01/18 Python
一道Delphi上机题
2012/06/04 面试题
小区门卫工作职责
2013/12/14 职场文书
人力资源部培训专员岗位职责
2014/01/02 职场文书
黄金搭档广告词
2014/03/21 职场文书
财务部绩效考核方案
2014/05/04 职场文书
四风问题个人对照检查材料
2014/09/26 职场文书
2014年纪检工作总结
2014/11/12 职场文书
表扬稿范文
2015/01/17 职场文书
在人间读书笔记
2015/06/30 职场文书
优秀共产党员主要事迹材料
2015/11/05 职场文书