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学习之PHP变量
Oct 09 PHP
PHP与SQL注入攻击[三]
Apr 17 PHP
用php或asp创建网页桌面快捷方式的代码
Mar 23 PHP
PHP中call_user_func_array()函数的用法演示
Feb 05 PHP
destoon安装出现Internal Server Error的解决方法
Jun 21 PHP
php中explode的负数limit用法分析
Feb 27 PHP
Laravel使用Caching缓存数据减轻数据库查询压力的方法
Mar 15 PHP
PHP分页初探 一个最简单的PHP分页代码的简单实现
Jun 21 PHP
PHP支付系统设计与典型案例分享
Aug 02 PHP
Laravel中Facade的加载过程与原理详解
Sep 22 PHP
php利用云片网实现短信验证码功能的示例代码
Nov 18 PHP
php查看一个变量的占用内存的实例代码
Mar 29 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使用SOAP扩展实现WebService的方法
2016/04/01 PHP
PHP5.4起内置web服务器使用方法
2016/08/09 PHP
示例详解Laravel重置密码代码重构
2016/08/10 PHP
解决php-fpm.service not found问题的办法
2017/06/06 PHP
PHP验证码无法显示的原因及解决办法
2017/08/11 PHP
Textarea与懒惰渲染实现代码
2012/01/04 Javascript
用jQuery实现优酷首页轮播图
2017/01/09 Javascript
强大的 Angular 表单验证功能详细介绍
2017/05/23 Javascript
详解使用React全家桶搭建一个后台管理系统
2017/11/04 Javascript
关于vue中 $emit的用法详解
2018/04/12 Javascript
支付宝小程序自定义弹窗dialog插件的实现代码
2018/11/30 Javascript
webpack项目使用eslint建立代码规范实现
2019/05/16 Javascript
vue input输入框关键字筛选检索列表数据展示
2020/10/26 Javascript
vue实现瀑布流组件滑动加载更多
2020/03/10 Javascript
Python中设置变量访问权限的方法
2015/04/27 Python
在Python中用keys()方法返回字典键的教程
2015/05/21 Python
详解Python 数据库 (sqlite3)应用
2016/12/07 Python
python-opencv在有噪音的情况下提取图像的轮廓实例
2017/08/30 Python
python实现C4.5决策树算法
2018/08/29 Python
使用python模拟命令行终端的示例
2019/08/13 Python
python如何使用腾讯云发送短信
2020/09/17 Python
通过Django Admin+HttpRunner1.5.6实现简易接口测试平台
2020/11/11 Python
python更新数据库中某个字段的数据(方法详解)
2020/11/18 Python
python 如何读、写、解析CSV文件
2021/03/03 Python
css3 pointer-events 介绍详解
2017/09/18 HTML / CSS
css3 flex布局 justify-content:space-between 最后一行左对齐
2020/01/02 HTML / CSS
Linux内核的同步机制是什么?主要有哪几种内核锁
2016/07/11 面试题
模范家庭事迹材料
2014/02/10 职场文书
人力资源经理的岗位职责范本
2014/02/28 职场文书
政协调研汇报材料
2014/08/15 职场文书
2014年协会工作总结
2014/11/22 职场文书
给朋友的道歉短信
2015/05/12 职场文书
一封真诚的自荐信帮你赢得机会
2019/05/07 职场文书
go xorm框架的使用
2021/05/22 Golang
Python OpenCV超详细讲解调整大小与图像操作的实现
2022/04/02 Python
vue实现列表垂直无缝滚动
2022/04/08 Vue.js