`
lelong
  • 浏览: 554223 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

PHP-Curl使用

阅读更多

摘要:

在这篇文章中主要讲解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会话,代码如下:

<?php
// create a new curl resource
$ch = curl_init();
?>

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

<?php
// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, “http://www.google.com/”);
?>

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

<?php
// grab URL and pass it to the browser
curl_exec($ch);
?>

最后,关闭当前的curl会话

<?php
//close curl resource, and free up system resources
curl_close($ch);
?>

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

<?php

// 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!,完整代码请看:

<?php

// 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获取内容,而不是返回跳转代码。完整的代码如下:

<?php

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

下一步介绍的参数是CURLOPT_POST ,这是一个非常有用的功能,因为它可以让您这样做POST请求,而不是GET请求,这实际上意味着你可以提交
其他形式的页面,无须其实在表单中填入。下面的例子表明我的意思:

<?php
// 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:

<?php
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.示例代码如下:

<?php
// 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()可以使得我们获取接受页面各种信息,你能编辑这些信息通过设定选项的第二个参数,你也可以传递一个数组的形式。就像下面的例子:

<?php
// 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代表这个页面不存在,我们来看一些例子:

<?php
// 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库和其大部分的选项。

为最基本的任务,只想获得一个网页,你可能不会需要CURL库,但是,一旦你想要做任何事情稍微先进的,您可能会想要使用curl库。

在近未来,我会告诉您究竟如何建立自己的网络蜘蛛,类似Google的网络蜘蛛,敬请期待,以phpit。

分享到:
评论
1 楼 输入法 2011-08-17  
php手册中关于curl预定义常量的介绍和使用请问在哪里可以找到?
谢谢

相关推荐

    php-curl-class:PHP Curl类使发送HTTP请求和与Web API集成变得容易

    curl-class/php-curl-class对于最新的提交版本: $ composer require php-curl-class/php-curl-class @dev要求PHP Curl类可与PHP 5.3、5.4、5.5、5.6、7.0、7.1、7.2、7.3、7.4和HHVM一起使用。快速入门和示例下有更...

    php-curl+ajax+json数据传输2.0版本

    首先,`PHP-cURL` 是一个在PHP中使用的库,它允许开发者通过URL来传输数据,支持多种协议,如HTTP、HTTPS、FTP等。`cURL` 提供了一种在服务器端模拟浏览器行为的方法,可以发送HTTP请求并接收响应。在本案例中,`...

    Api-php-curl-class.zip

    Api-php-curl-class.zip,php curl类使发送http请求和与web apishpcurl类集成变得容易:http请求变得容易,一个api可以被认为是多个软件设备之间通信的指导手册。例如,api可用于web应用程序之间的数据库通信。通过...

    PHP - cURL实现短信验证码注册登录完整示例:PHP - cURL.php和附件说明

    总的来说,这个示例提供了一个使用PHP和cURL实现短信验证码验证的完整流程,这对于构建安全的用户注册和登录系统至关重要。开发者可以通过学习这个示例来提升他们的技能,更好地理解和应用网络请求技术。

    php-cUrl.rar

    提供的示例文件展示了如何使用PHP的cUrl库进行接口测试,这对于初学者理解cUrl的用法以及在实际项目中进行接口测试具有很好的指导价值。通过这样的实战练习,开发者不仅可以掌握接口测试的基本流程,还能深化对HTTP...

    短信验证码注册登录用php语言可PHP - cURL、HTTP_Request2、 pecl_http.php文件.zip

    本压缩包提供的"PHP - cURL.php"、"PHP - HTTP_Request2.php"和"PHP - pecl_http.php"文件分别展示了三种使用PHP实现短信验证码发送和验证的方法。以下将详细介绍这三种方法及其相关知识点。 1. **PHP - cURL** ...

    Yii2-Curl:基于PHP cURL的Yii2 Curl扩展

    Yii2的易于使用的cURL扩展,包括RESTful支持: 邮政 得到 头 放 修补 删除 选项 要求 Yii2 PHP&gt; = 7.2.0 || 8.0.1 安装了ext-curl,ext-json和php-curl 安装 安装此扩展的首选方法是通过 。 composer require -...

    Laravel开发-curl

    要安装cURL扩展,可以在命令行中运行`composer require php-curl-class/php-curl-class`,这将安装`php-curl-class`,一个轻量级的cURL类库,它封装了PHP的cURL函数,提供了更方便的API。 接下来,我们来看Ixudra的...

    Yii2-Curl, 在 PHP cURL上,基于 Yii2 cURL扩展.zip

    Yii2-Curl, 在 PHP cURL上,基于 Yii2 cURL扩展 yii2-curl扩展 Yii2的易于工作的cURL扩展,包括RESTful支持:POST获取头部放置补丁删除要求Yii2PHP 5.4 Curl和 php Curl安装安装安装这里

    PHP 实例--CURL实现简单采集-内含源码以及设计说明书(可以自己运行复现).zip

    **PHP与CURL:网页数据抓取实例** 在IT领域,数据采集是常见的需求...总之,这个"PHP 实例--CURL实现简单采集"的课程作业教程旨在帮助学习者掌握使用PHP和CURL进行网页数据采集的技术,是提升Web开发能力的良好实践。

    yii2-curl:yii2框架的cURL包装器

    在`yii2-curl-master`这个压缩包中,应该包含了`yii2-curl`的源代码、示例、文档和可能的测试文件。通过查看源代码,你可以更深入地了解其工作原理,同时,示例代码能帮助你快速上手使用这个库。 总的来说,`yii2-...

    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=...

    curl-7.68.0.tar.gz

    1. **解压源码**:首先,你需要使用`tar`命令来解压`curl-7.68.0.tar.gz`。这可以通过以下命令完成: ``` tar -zxvf curl-7.68.0.tar.gz ``` 2. **进入源码目录**:解压后,进入解压出的目录: ``` cd curl-...

    yii2-curl:用于 curl 的 Yii2 组件

    Yii2 框架的卷曲包装器要求PHP 5.4+ Yii 2.0.x 安装了 curl 和 php-curl设置说明安装此扩展的首选方法是通过 。 php composer.phar require --prefer-dist peterfrench/yii2-curl " * " 一旦 composer 安装了扩展,...

    Laravel开发-extra-curl

    "Laravel开发-extra-curl"可能是一个扩展项目或教程,专注于在Laravel 5中增强和优化Curl的使用。这个项目可能包含了对原生PHP Curl函数的封装,以提供更方便、更符合Laravel风格的接口。 在Laravel 5中,虽然已经...

    php-multi-curl:高性能PHP库,用于将multi curl用于并行http调用

    高性能PHP curl包装器,可进行并行HTTP调用 内容 安装 您可以使用composer从命令行安装此库。 composer require jmathai/php-multi-curl:dev-master -v 用法 基本用法可以使用addUrl($url/*, $options*/)方法完成...

Global site tag (gtag.js) - Google Analytics