`
lhx1026
  • 浏览: 300656 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

在PHP中使用Curl

    博客分类:
  • php
阅读更多

原文地址:http://hi.baidu.com/%B1%D5%C9%CF%D1%DB%BF%B4%BC%FB%CC%EC/blog/item/14512fa3fc5bd7a4caefd0c6.html

摘要:

在这篇文章中主要讲解php_curl库的知识,并教你如何更好的使用php_curl。

简介

你可能在你的编写PHP脚本代码中会遇到这样的问题:怎么样才能从其他站点获取内容呢?这里 有几个解决方式;最简单的就是在php中使用fopen()函数,但是fopen函数没有足够的参数来使用,比如当你想构建一个“网络爬虫”,想定义爬虫 的客户端描述(IE,firefox),通过不同的请求方式来获取内容,比如POST,GET;等等这些需求是不可能用fopen() 函数实现的。

为了解决我们上面提出的问题,我们可以使用PHP的扩展库-Curl,这个扩展库通常是默认在安装包中的,你可以它来获取其他站点的内容,也可以来干别的。

 

备注:这两段代码需要php_curl扩展库的支持,查看phpinfo(),如果curl support enabled则表示支持curl库。

1、Windows下的PHP开启curl库支持:

打开php.ini,将extension=php_curl.dll前的;号去掉。

2、Linux下的PHP开启curl库支持:

编译PHP时在./configure后加上 –with-curl

 

 

在这篇文章中,我们一起来看看如何使用curl库,并看看它的其他用处,但是接下来,我们要从最基本的用法开始

基本用法:

第一步,我们通过函数curl_init()创建一个新的curl会话,代码如下:

    // create a new curl resource

    $ch = curl_init();
 

 

我们已经成功创建了一个curl会话,如果需要获取一个URL的内容,那么接下的一步,传递一个URL给curl_setopt()函数,代码:

 

做完上一步工作,curl的准备工作做完了,curl将会获取URL站点的内容,并打印出来。代码:

 

// grab URL and pass it to the browser

curl_exec($ch);
 

 

最后,关闭当前的curl会话

 

//close curl resource, and free up system resources

curl_close($ch);
 

 

下面我们来看看完成的实例代码:

 

// create a new curl resource

$ch = curl_init();

// set URL and other appropriate options

curl_setopt($ch, CURLOPT_URL, “http://www.google.nl/”);

// grab URL and pass it to the browser

curl_exec($ch);

// close curl resource, and free up system resources

curl_close($ch);
 

 

 

(查看在线demo )

我们刚刚把另外一个站点的内容,获取过来以后自动输出到浏览器,我们有没有其他的方式组织获 取的信息,然后控制其输出的内容呢?完全没有问题,在curl_setopt()函数的参数中,如果希望获得内容但不输出,使用 CURLOPT_RETURNTRANSFER参数,并设为非0值/true!,完整代码请看:

// create a new curl resource

$ch = curl_init();

// set URL and other appropriate options

curl_setopt($ch, CURLOPT_URL, “http://www.google.nl/”);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// grab URL, and return output

$output = curl_exec($ch);

// close curl resource, and free up system resources

curl_close($ch);

// Replace ‘Google’ with ‘PHPit’

$output = str_replace(’Google’, ‘PHPit’, $output);

// Print output

echo $output;
 

 

 

(查看在线demo )

在上面的2个实例中,你可能注意到通过设置函数curl_setopt() 的不同参数,可以获得不同结果,这正是curl强大的原因,下面我们来看看这些参数的含义。

CURL的相关选项:

如果你看过php手册中的curl_setopt()函数,你可以注意到了,它下面长长的参数列表,我们不可能一一介绍,更多的内容请查看PHP手册,这里只介绍常用的和有的一些参数。

第一个很有意思的参数是 CURLOPT_FOLLOWLOCATION ,当你把这个参数设置为true时,curl会根据任何重定向命令更深层次的获取转向路径,举个例子:当你尝试获取一个PHP的页面,然后这个PHP的页 面中有一段跳转代码 <?php header(”Location:http://new_url”);….?>,curl将从http://new_url获取内容,而不是返回 跳转代码。完整的代码如下:

// create a new curl resource

$ch = curl_init();

// set URL and other appropriate options

curl_setopt($ch, CURLOPT_URL, “http://www.google.com/”);

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

// grab URL, and print

curl_exec($ch);
 

 

(查看在线demo ),

如果Google发送一个转向请求,上面的例子将根据跳转的网址继续获取内容,和这个参数有关的两个选项是CURLOPT_MAXREDIRS和CURLOPT_AUTOREFERER .

参数CURLOPT_MAXREDIRS选项允许你定义跳转请求的最大次数,超过了这个次数 将不再获取其内容。如果CURLOPT_AUTOREFERER 设置为true时,curl会自动添加Referer header在每一个跳转链接,可能它不是很重要,但是在一定的案例中却非常的有用。

下一步介绍的参数是CURLOPT_POST,这是一个非常有用的功能,因为它可以让您这样做POST请求,而不是GET请求,这实际上意味着你可以提交

其他形式的页面,无须其实在表单中填入。下面的例子表明我的意思:

 

// create a new curl resource

$ch = curl_init();

// set URL and other appropriate options

curl_setopt($ch, CURLOPT_URL,”http://projects/phpit/content/using%20curl%20php/demos/handle_form.php”);

// Do a POST

$data = array(’name’ => ‘Dennis’, ’surname’ => ‘Pallett’);

curl_setopt($ch, CURLOPT_POST, true);

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

// grab URL, and print

curl_exec($ch);
 

 

(View Live Demo )

And the handle_form.php file:

echo ‘<h3>Form variables I received: </h3>’;

echo ‘<pre>’;

print_r ($_POST);

echo ‘</pre>’;
 

 

正如你可以看到,这使得它真的很容易提交形式,这是一个伟大的方式来测试您的所有形式,而不以填补他们在所有的时间。

参数CURLOPT_CONNECTTIMEOUT 通常用来设置curl尝试请求链接的时间,这是一个非常重要的选项,如果你把这段时间设置的太短了,可能会导致curl请求失败。

但是如果你把它设置的时间太长了,可能PHP脚本将死掉。和这个参数相关的一个选项是 CURLOPT_TIMEOUT,这是用来设置curl允许执行的时间需求。如果您设置这一个很小的值,它可能会导下载的网页上是不完整的,因为他们需要一段时间才能下载。

最后一个选项是 CURLOPT_USERAGENT,它允许你自定义请求是的客户端名称,比如webspilder或是IE6.0.示例代码如下:

// create a new curl resource

$ch = curl_init();

// set URL and other appropriate options

curl_setopt($ch, CURLOPT_URL, “http://www.useragent.org/”);

curl_setopt($ch, CURLOPT_USERAGENT, ‘My custom web spider/0.1′);

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

// grab URL, and print

curl_exec($ch);
 

 

(View Live Demo)

现在我们把最有意思的一个参数都介绍过了,下面我们来介绍一个curl_getinfo() 函数,看看它能为我们做些什么。

获取页面的信息:

函数curl_getinfo()可以使得我们获取接受页面各种信息,你能编辑这些信息通过设定选项的第二个参数,你也可以传递一个数组的形式。就像下面的例子:

 

// create a new curl resource

$ch = curl_init();

// set URL and other appropriate options

curl_setopt($ch, CURLOPT_URL, “http://www.google.com”);

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_FILETIME, true);

// grab URL

$output = curl_exec($ch);

// Print info

echo ‘<pre>’;

print_r (curl_getinfo($ch));

echo ‘</pre>’;
 

 

(View Live Demo )

大部分返回的信息是请求本身的,像:这个请求花的时间,返回的头文件信息,当然也有一些页面的信息,像页面内容的大小,最后修改的时间。

那些全是关于curl_getinfo()函数的,现在让我们看看它的实际用途。

实际用途:

curl库的第一用途可以查看一个URL页面是否存在,我们可以通过查看这个URL的请求返回的代码来判断比如404代表这个页面不存在,我们来看一些例子:

 

// create a new curl resource

$ch = curl_init();

// set URL and other appropriate options

curl_setopt($ch, CURLOPT_URL, “http://www.google.com/does/not/exist”);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// grab URL

$output = curl_exec($ch);

// Get response code

$response_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

// Not found?

if ($response_code == ‘404′) {

echo ‘Page doesn\’t exist’;

} else {

echo $output;

}
 

 

(View Live Demo )

其他的用户可能是创建一个自动检查器,验证每个请求的页面是否存在。

我们可以用curl库来写和google类似的网页蜘蛛(web spider),或是其他的网页蜘蛛。这篇文章不是关于如何写一个网页蜘蛛的,因此所以我们没有讲任何关于网页蜘蛛的细节问题,但是以后在PHPit 将会介绍用 curl来构造一个web spider.

分享到:
评论

相关推荐

    在PHP中使用CURL.pdf

    在PHP中使用CURL.pdf

    在PHP中使用CURL共16页.pdf.zip

    在PHP中使用CURL共16页.pdf.zip

    PHPCurl操作类是一个对Curl库的常用操作进行高度封装的操作对象工具类.rar

    在PHP中使用cURL,需要开启curl扩展 (1) 在php.ini里面开启curl这个扩展 (2) 将PHP的安装路径保存到环境变量的系统变量中(环境变量之间的分隔符是英文的分号) (3) 重启apache服务器 (4) 重启计算机

    在PHP中使用curl_init函数的说明

    复制代码 代码如下: $ch = curl_init(); $c_url = ‘http://www.baidu.com’; $c_url_data = “product_&type=”.$type.””; curl_setopt($ch, CURLOPT_URL,$c_url); curl_setopt($ch, CURLOPT_POST, 1); curl_...

    PHP实现通过CURL上传文件功能示例

    PHP使用CURL上传文件只需发送一个POST请求就可以了,在请求中设置某个字段为需要上传的文件全路径,并且以”@”开头,然后使用CURL把该变量以POST方式发送到服务器,在服务端即可以从超级全局变量$_FILES中取到相应...

    php扩展 php_curl

    php扩展 php_curl 其中包括libeay32.dll,php_curl.dll和ssleay32.dll是开启php_curl的必备条件

    php的Curl处理类

    使用函数之前我们要需要把php curl模块打开(libeay32.dll, ssleay32.dll, php5ts.dll, php_curl.dll) 开启php curl函数库的步骤 1).去掉windows/php.ini 文件里;extension=php_curl.dll前面的; /*用 echo phpinfo...

    php_curl-5.3.13-VC9-x64.zip(php curl模块)

    用来替换WAMP server下的php_curl.dll,解决加载curl报错或无法加载问题。下载解压后,覆盖wamp\bin\php\php5.4.3\ext目录下对应文件,重启apache即可。如果不行请检查: 是否已修改php.ini文件去掉extension=...

    PHP中使用cURL操作网络资源1

    二、主要技术本案例主要使用PHP 7中的数据传输神器cURL来抓取网络资源、动态获取WebService数据接口数据和发送HTTP请求,从而来实现简单网页爬虫程

    php_curl_使用实例

    php_curl_使用实例 curl的使用方法 curl 模拟post提交 curl 设置 UA、cookie 等 都有纤细例子

    PHP中的curl使用参数详解

    PHP中的curl使用参数详解,使你应用起curl来如同庖丁解牛般熟练自如。

    php CURL 命令详解

    curl命令详解php CURL 命令详解php CURL 命令详解php CURL 命令详解php CURL 命令详解php CURL 命令详解php CURL 命令详解php CURL 命令详解php CURL 命令详解php CURL 命令详解php CURL 命令详解php CURL 命令详解...

    php中curl的get,post通用类.zip

    一个PHP curl get post通用类,curl 通用方法 。。get /post 传送数据,设置发送方式 0 get 1 post。具有很好的参考价值,朋友们如果喜欢可以下载,如果有更好的curl类可以发布到我们php中文网,大家一起学习交流。

    PHP封装CURL扩展类

    主要介绍了PHP封装CURL扩展类,实例分析了基于curl发送post、get请求及操作cookie等相关技巧 编码规范 * @class 类名首字母大写,类名为多个单词, 每个大字首字母大写 eg: class Curl , class CurlPage * @variable...

    php curl 自动微博登陆

    php curl 自动微博登陆,使用curl,

    php curl 长连接的实现

    php curl中长连接实现,对于同一个域名和端口的访问,可以做到在同一个进程中复用同一个连接,特别是对于经常内网访问的地址,性能提升很大!

    php的Curl处理类.zip

    主要介绍了php的curl封装类用法,以实例形式较为详细的讲述了curl封装类及其使用方法,并总结了GET与POST的用法。 使用函数之前我们要需要把php curl模块打开(libeay32.dll, ssleay32.dll, php5ts.dll,...

    php curl 详解

    php curl 详解 php curl 详解 php curl 详解 php curl 详解

    php curl模仿form表单提交图片或文件

    php curl模仿form表单提交图片或文件 用的tp5做的例子

Global site tag (gtag.js) - Google Analytics