您当前的位置:首页 > 网站建设笔记 >

cURL客户(client)URL

0

使用cURL

讨论的最后一个与网络相关的主题是一个名为cURL的技术,其名称代表“客户(client)URL”。(cURL还经常被写为curl或Curl)这是一个处理URL的命令行工具,能够访问Web站点、FTP文件等。PHP可以通过shell_exec()和其他系统函数使用cURL,同时还支持一个cURL库:libcurl。整个操作过程的第一步是使用curl_init()函数,向它传递要访问的URL。

$curl = curl_init("www.wangzhanchengxu.com");

函数的返回值应该赋予一个变量,它将作为一个事务指针或句柄。接下来使用curl_setopt()函数设置选项,其语法如下所示。

curl_setopt($curl, CONSTANT, value);

这里可用的选项实在太多了,后面的范例里将展示一些。如果程序员需要使用cURL,请查看PHP手册来了解完整的设置列表。在设置了选项之后(次序随意),使用curl_exec()来执行事务。

$result = curl_exec($curl);

一般来说,需要把这个函数的返回值赋予一个变量,以便显示其结果。最后,关闭连接。

curl_close($curl);

cURL的伟大之处在于它能够完成本章其他范例所做的全部工作,但在下面的范例里,我们将用它来完成fopen()、fsockopen()等函数不能做的事情:打开一个Web页面并向它发送数据(就好像它提交了一个表单)。第4章曾经介绍过用PEAR的Auth模块向Web页面添加数据库驱动的身份验证,只有当用户提交了有效的用户名/密码组合之后,他们才能访问这个页面,否则就会看到一条消息来提示他们进行登录。

PHP利用cURL库向需要登录才能访问的页面发送数据。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Using cURL</title>
</head>
<body>
<?php
$url="http://www.wangzhanchengxu.com/uploadfile/phpfile/session_02.php";
//开始cURL事务
$curl=curl_init($url);
//让cURL在发生错误时终止运行, 第一个选项是CURLOPT_FAILONERROR, 把它设置为true(或1)之后, cURL就会在发生错误时停止执行(而不是继续)。
curl_setopt($curl, CURLOPT_FAILONERROR, 1);
//让cURL允许重定向, 这个选项设置了重定向(比如PHP的header("Location:somepage.php")调用)应该导致事务停止还是跟随重定向的页面。
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
//让cURL把返回的结果赋予变量, 如果不需要使用由cURL请求返回的数据, 就不必启动这个选项, 本例将显示数据作为确认信息, 所以这个选项被设置为1。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
//设置超时时间, 这是事务处理所能占用的最长时间,以秒为单位。
curl_setopt($curl, CURLOPT_TIMEOUT, 5);
//让cURL使用POST方法, 在本例中, 数据将被发送到页面(http://www.wangzhanchengxu.com/login.php), 就像提交了一个表单一样。
curl_setopt($curl, CURLOPT_POST, 1);
//设置POST数据, CURLOPT_POSTFIELDS选项用于设置POST数据, 其语法是一系列名称=值对, 由&符号分隔。
curl_setopt($curl, CURLOPT_POSTFIELDS, "name=".urlencode("Shake It Off"));
//执行事务
$r=curl_exec($curl);
//关闭连接
curl_close($curl);
//显示结果, 这个请求返回的全部数据都被赋予变量$r, 本例会显示这些数据。由于我们知道它是一组HTML代码, 所以将把它显示在一组预定义的标记里, 并且使用htmlentities()函数, 其结果是以HTML标记的形式显示另一个页面的HTML代码。
echo "<h2>cURL Results: </h2><pre>".var_export(htmlentities($r),true)."</pre>";
?>
</body>
</html>

  • 如果某个页面受到了HTTP验证的保护,可以使用下面这个选项。curl_setopt($curl, CURLOPT_USERPWD, "username:password")
  • 函数curl_getinfo()能够返回一个数组,其中包含了事务有关的信息。它必须在关闭连接之前调用。
  • cURL工具还能用于发送和接收cookie、处理文件上传、使用SSL连接、甚至可以用FTP传输文件。
  • 在事务发生错误时,可以使用curl_errno()和curl_error()函数获取错误号码和消息。
顶部中部底部