- 浏览: 308173 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (148)
- wicket (3)
- 算法,数据结构 (1)
- 其他 (1)
- jdbc (2)
- mysql (10)
- php (18)
- gwt中文文档 (0)
- jquery (2)
- smil教程 (2)
- 开源知识 (1)
- mms彩信 (2)
- java (12)
- centos (3)
- linux (2)
- php apc (1)
- java hibernate (4)
- xampp (1)
- tomcat (1)
- css调试 (3)
- jasperReport (3)
- js 效果 (3)
- apache (1)
- eclipse (6)
- ss7 (8)
- java log log4j (2)
- java jndi (1)
- ldap (2)
- activemq (3)
- spring security (4)
- java 注解 (0)
- thinking in java (3)
- hibernate (1)
- maven (1)
- wap push (2)
- memcached (7)
- java servlet (2)
- flash game (0)
- financial knowledge (6)
- protect eyes (1)
最新评论
-
u012359453:
我是Android开发的,最近需要做一个消息转发的后台,我写好 ...
使用Java Service Wrapper将java程序作为linux服务并且开机自动启动 -
zhcheng:
我就是按照你这个配置的,别的地方都没有问题,只有在使用标签的时 ...
spring security3.0的ACL使用例子 -
xjjaid13:
...
js实现图片左右滚动 -
bhdweb:
项目中的角色名是死的?直接用户注解写在方法上?
spring security3.0的ACL使用例子 -
hw1287789687:
根本原因:我实体类中的类型是raw,没法直接实例化的类型。pr ...
hibernate错误:Could not determine type for: java.util.Set
原文地址: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);
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>’;
大部分返回的信息是请求本身的,像:这个请求花的时间,返回的头文件信息,当然也有一些页面的信息,像页面内容的大小,最后修改的时间。
那些全是关于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; }
其他的用户可能是创建一个自动检查器,验证每个请求的页面是否存在。
我们可以用curl库来写和google类似的网页蜘蛛(web spider),或是其他的网页蜘蛛。这篇文章不是关于如何写一个网页蜘蛛的,因此所以我们没有讲任何关于网页蜘蛛的细节问题,但是以后在PHPit 将会介绍用 curl来构造一个web spider.
发表评论
-
php5.3.0以下使用fileinfo获得文件的mime类型
2010-10-22 16:59 1369php5.3.0以下要获得文件的mime类型,一般的方 ... -
php中preg_match和preg_match_all的区别
2010-05-25 17:52 6793preg_match和preg_match_all的区别为: ... -
PHP preg_replace的使用
2010-05-25 17:36 2458preg_replace -- 执行正则表达式的搜索和替换 ... -
php中从html中提取图片路径,并且替换的方法
2010-05-25 17:06 5788思路是这样: 先用正则表达式获取IMG标签,然后把每个IMG ... -
[转]Strcmp以区分大小写的方式比较两个字符串
2010-04-12 18:41 2364以区分大小写的方式比较两个字符串 Strcmp()函数对两个 ... -
[转]使用APC加速PHP:APC配置
2010-03-09 15:51 1580Alternative PHP Cache(APC) ... -
php中数组和对象相互转换
2009-11-06 16:23 52201、强制转换对象为数组 $arr = (array)$obj ... -
如何去掉数组里的某个元素
2009-11-05 10:05 1532例子如下所示: $array=array(a,b,c,d); ... -
PHP中英文混排串的字节数(即占位符)的计算
2009-10-29 10:18 2256首先 比较strlen和mb_strlen $s ... -
PHP调用Webservice实例
2009-10-29 09:18 2817方法一:直接调用 /****************** ... -
NuSoap调用WebService出现乱码的解决办法
2009-10-29 09:17 4069NuSoap是PHP环境下的WebService编程工具,用于 ... -
PHP接口示例程序
2009-10-26 15:59 2475原文地址:http://shadowzsc.spaces.li ... -
php读取二进制文件流生成图片
2009-10-24 14:12 6019$imgString为二进制文件流 $fil ... -
PHP 5的抽象类和接口语法
2009-10-23 17:07 1150abstract class AbstractClass { ... -
php curl的几个例子
2009-10-23 16:15 2714原文地址:http://www.cmx8.cn/curl. ... -
PHP 序列化(serialize)格式详解
2009-09-25 17:12 2344来源:http://www.coolcode.cn/?p=17 ... -
PHP5中的this,self和parent关键字详解
2009-09-18 15:15 1339上面三个关键字: this,sel ...
相关推荐
在PHP中,CURL库提供了一种强大的方法来与远程服务器进行交互,允许开发者执行HTTP请求,如GET、POST等,以及处理重定向和其他复杂的网络操作。以下是对标题和描述中涉及的知识点的详细说明: 1. **CURL介绍**: ...
1. **安装与启用CURL**:在PHP环境中,CURL通常作为扩展预装。如果未启用,可以通过编辑`php.ini`文件并取消`extension=curl.so`(对于Unix系统)或`extension=php_curl.dll`(对于Windows系统)的注释来启用。 2. ...
在 PHP 中使用 Curl,首先需要确保 PHP 安装了 Curl 扩展。如果默认未启用,可以通过复制相关 DLL 文件到系统目录并修改 php.ini 配置文件来启用。 启用 Curl 扩展的步骤如下: 1. 搜索 PHP 安装目录中的 ssleay32....
在 PHP 中使用 curl 模拟 post 提交 json 数据需要进行以下步骤: 1. 初始化 curl 会话:使用 curl_init() 函数初始化 curl 会话,指定要请求的 URL。 2. 设置请求头:使用 curl_setopt() 函数设置请求头,例如设置...
在PHP中使用CURL进行文件下载主要涉及以下几个步骤: 1. **初始化CURL会话**:通过`curl_init()`函数创建一个新的CURL会话。 2. **设置选项**:通过`curl_setopt()`函数设置CURL选项,如URL、返回数据模式等。 3. *...
在PHP中使用cURL,首先需要确保cURL扩展已经正确安装并启用。对于Windows系统,这通常意味着在PHP安装目录中找到ssleay32.dll、libeay32.dll和php_curl.dll文件,并将它们复制到系统的system32文件夹下。然后,修改...
本文将详细介绍如何在 PHP 中使用 cURL。 首先,确保你的 PHP 环境已经启用了 cURL 扩展。可以通过运行 `php_info()` 函数查看 cURL 是否已启用。在 Windows 上,如果未启用,只需在 `php.ini` 文件中取消 `...
总的来说,《PHP与cURL:深入理解与实践》是一本全面介绍如何在PHP中使用cURL进行网络编程的指南。无论是初学者还是有经验的开发者,都能从中获得实用的知识和技巧,提升自己的技能水平。通过大量的实例和深入的技术...
在PHP中使用curl_init函数是进行cURL请求的起点,它为执行复杂的网络操作提供了便利。通过正确的配置和选项设置,可以灵活地处理各种网络请求和响应,极大地方便了PHP开发者进行网络编程。随着网络应用开发需求的...
在 PHP 中使用 cURL 库需要经历四个基本步骤: 1. 初始化:使用 curl_init() 函数初始化 cURL 句柄。 2. 设置变量:使用 curl_setopt() 函数设置 URL、选项和其他变量。 3. 执行并获取结果:使用 curl_exec() 函数...
本教程将详细讲解如何在PHP中使用CURL来处理微信接口的GET与POST请求。 首先,我们需要理解GET和POST两种HTTP方法的基本概念。GET是用于获取资源,通常用于查询操作,参数显示在URL上;而POST则用于向服务器提交...
在 PHP 中使用 cURL,通常遵循以下四个步骤: 1. **初始化**:使用 `curl_init()` 创建一个 cURL 句柄。 2. **设置选项**:使用 `curl_setopt()` 配置请求参数,如 URL、返回类型、是否包含头部等。 3. **执行请求*...
在PHP中使用CURL可以实现网页抓取、模拟登录、数据提交等功能。 本教程将详细介绍一个基于CURL的PHP5简单类,这个类主要用于学习和理解如何在PHP中利用CURL进行网络通信。首先,我们来看一下CURL类的基本结构和核心...
然而,有时在Windows环境下,你可能会发现PHP环境中并没有预装cURL扩展,这将导致无法使用cURL相关的函数。本文将详细介绍如何在Windows上安装和配置PHP的cURL扩展。 首先,我们需要理解cURL是什么。cURL(Client ...
在Windows系统中,这些文件必须在系统的PATH环境变量所包含的目录下,或者与PHP可执行文件在同一目录下,才能确保PHP能够正确地加载并使用`php_curl`扩展。 **二、php_curl.dll** php_curl.dll是`php_curl`扩展的...
在深入探讨高级特性之前,我们首先了解如何在PHP中使用cURL进行基本的HTTP请求。 ##### 1. 初始化 每次使用cURL时,都需要首先初始化一个cURL会话。这是通过调用`curl_init()`函数实现的。该函数会返回一个cURL...
在PHP编程中,cURL库是一个非常强大的工具,用于处理各种网络请求,包括HTTP、HTTPS等协议。在本文中,我们将深入探讨如何在PHP 7环境中利用cURL操作网络资源,包括网页抓取、调用WebService接口以及访问HTTPS资源。...