这几天在帮一些同学处理问题的时候,突然发现这些同学是使用file_get_contents()函数来采集页面内容的,貌似都没有curl的概念亦或是对这种工具特别不敏感,

  本文我来给大家详细介绍下cURL的简单的使用方法,下文我将会给大家详细介绍cURL的高级应用,

  好,废话不多说,我们先来认识下什么是cURL,可能还有很多同学没有听说过这个工具,我先来给大家简单介绍下什么是cURL:

  cURL可以使用URL的语法模拟浏览器来传输数据,

  因为它是模拟浏览器,因此它同样支持多种协议,

  FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP等协议都可以很好的支持,包括一些:

  HTTPS认证,HTTP POST方法,HTTP PUT方法,FTP上传,keyberos认证,HTTP上传,代理服务器,cookies,用户名/密码认证,

  下载文件断点续传,上传文件断点续传,http代理服务器管道,甚至它还支持IPv6,scoket5代理服务器,通过http代理服务器上传文件

  到FTP服务器等等。

  这就是我们为什么要使用cURL的原因!

  使用cURL完成简单的请求主要分为以下四步:

  1.初始化,创建一个新cURL资源

  2.设置URL和相应的选项

  3.抓取URL并把它传递给浏览器

  4.关闭cURL资源,并且释放系统资源

  我们来采集一个页面,通常情况下,我们会使用file_get_contents()函数来获取:

  像这样:

<?php
$url = 'http://www.abc.com/';
// $str = file_get_contents($url); // 2 或是
$str = file($url); // 3 或是
readfile($url);

  这样我们会发现,我们没有办法有效地进行错误处理,更重要的是我们没有办法完成一些高难度的任务:

  如:处理cookies,验证,表单提交,文件上传等等。

  好,现在我们来用代码完成上述cURL的四步:

<?php
$url="http://www.abc.com"; //1.初始化,创建一个新cURL资源
$ch = curl_init(); //2.设置URL和相应的选项
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0); //3.抓取URL并把它传递给浏览器
curl_exec($ch); //4.关闭cURL资源,并且释放系统资源
curl_close($ch);

  上述四步中,其中第二步最为关键,可以设置一些高级选项:

  例如上例中的CURLOPT_URL和CURLOPT_HEADER,分别代表“需要获取的URL地址”和“启用时会将头文件的信息作为数据流输出”,这些只是冰山一角,我们还可以设置很多选项:

详见:http://blog.csdn.net/yanhui_wei/article/details/21530811

  看到了吧,只要在第二个函数之内设置这些选项就可以完成相应的功能,cURL的功能是灰常强大滴,大家可以尝试一下哦!

  例如,我们只想把获取到的内容输入到文件,而不是直接输出给浏览器,我们就可以使用CURLOPT_RETURNTRANSFER选项!

  这样在curl执行的时候,就会把页面的内容输出到文件当中,我们就可以完成采集等功能啦!

  效率方面,curl的原理是模拟浏览器的操作,它的效率要比file_get_contents()高出四倍以上,试想一下,我们

  要采集一个信息量特别庞大的站,运行效率的差别可想而知!

  不单单是效率上,稳定性上来说,curl也远比file_get_contents()函数要好很多!

  这就是强大的curl,下文将给大家详细介绍它的高级应用,我们可以模拟浏览器的post传值,甚至上传!

php中curl的详细解说 【转载】的更多相关文章

  1. php中curl的详细解说(转载)

    本文转自:http://blog.csdn.net/yanhui_wei/article/details/21530811 这几天在帮一些同学处理问题的时候,突然发现这些同学是使用file_get_c ...

  2. php中curl的详细解说

    cURL可以使用URL的语法模拟浏览器来传输数据, 因为它是模拟浏览器,因此它同样支持多种协议, FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE ...

  3. php中的curl】php中curl的详细解说

    本文我来给大家详细介绍下cURL的简单的使用方法,下文我将会给大家详细介绍cURL的高级应用, cURL可以使用URL的语法模拟浏览器来传输数据, FTP, FTPS, HTTP, HTTPS, GO ...

  4. 【php中的curl】php中curl的详细解说

    本文我来给大家详细介绍下cURL的简单的使用方法,下文我将会给大家详细介绍cURL的高级应用, cURL可以使用URL的语法模拟浏览器来传输数据, FTP, FTPS, HTTP, HTTPS, GO ...

  5. php中CURL技术模拟登陆抓取数据实战,抓取某校教务处学生成绩。

    这两天有基友要php中curl抓取教务处成绩的源码,用于微信公众平台的开发.下面笔者只好忍痛割爱了.php中CURL技术模拟登陆抓取数据实战,抓取沈阳工学院教务处学生成绩. 首先,教务处登录需要验证码 ...

  6. spring中context:property-placeholder/元素 转载

    spring中context:property-placeholder/元素  转载 1.有些参数在某些阶段中是常量 比如 :a.在开发阶段我们连接数据库时的连接url,username,passwo ...

  7. SqlServer中的merge操作(转载)

    SqlServer中的merge操作(转载)   今天在一个存储过程中看见了merge这个关键字,第一个想法是,这个是配置管理中的概念吗,把相邻两次的更改合并到一起.后来在technet上搜索发现别有 ...

  8. HTTP入门(一):在Bash中curl查看请求与响应

    HTTP入门(一):在Bash中curl查看请求与响应 本文简单总结HTTP的请求与响应. 本文主要目的是对学习内容进行总结以及方便日后查阅. 详细教程和原理可以参考HTTP文档(MDN). 本文版权 ...

  9. Linux中curl的用法

    一.简介:在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,是一款强大的http命令行工具.支持文件的上传和下载,是综合传输工具. 二.语法:curl [option] [url ...

随机推荐

  1. 可以用作javascript异步模式的函数写法

    1. 回调函数 f1(); f2(); function f1(callback) { setTimeout(function() { // f1的任务代码 callback(); }, 1000); ...

  2. jdbcUrl is required with driverClassName错误解决

    jdbcUrl is required with driverClassName springboot2.0配置多数据源: spring.datasource.primary.url=jdbc:mys ...

  3. 数组题汇总(python3)

    题目主要来自<剑指offer>和LeetCode,用python3来写的代码. 1.二维数组的查找: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列 ...

  4. 爬虫之cookie

    什么是cookie: 在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户.cookie的出现就是为了解决这个问题,第一次登 ...

  5. centos中安装jdk

    1.上传jdk安装文件到根目录 2.解压到相关目录 (1)创建相应目录mkdir -p /usr/local/java (2)解压 tar -zxvf jdk-7u80-linux-x64.tar.g ...

  6. hadoop2.3.0cdh5.0.2 升级到cdh5.7.0

    后儿就放假了,上班这心真心收不住,为了能充实的度过这难熬的两天,我决定搞个大工程.....ps:我为啥这么期待放假呢,在沙发上像死人一样躺一天真的有意义嘛....... 当然版本:hadoop2.3. ...

  7. Java基础学习总结(70)——开发Java项目常用的工具汇总

    要想全面了解java开发工具,我们首先需要先了解一下java程序的开发过程,通过这个过程我们能够了解到java开发都需要用到那些工具. 首先我们先了解完整项目开发过程,如图所示: 从上图中我们能看到一 ...

  8. mybatis注解开发-动态SQL

    实体类以及表结构 在mybatis-config.xml中注册mapper接口 -------------------------- 动态查询@SelectProvider EmployeeMappe ...

  9. 清北学堂模拟赛d3t5 c

    分析:其实就是一道数学题.如果以左下角的点为原点建立平面直角坐标系,那么点(b,a)是最容易卡住棺材的.我们求出棺材左边到点(b,a)的距离最小值,只有w小于等于这个最小值才能被拉过去.那么先求出左面 ...

  10. dba 和 rdba 转载

    一.  DB(Data block)   A data block is the smallest unit of storage in an Oracle database. Every datab ...