您的位置:首页 > 编程语言 > PHP开发

php的cURL库介绍

2016-03-24 16:00 701 查看
Php的curl库介绍

Curl是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FEP、TELNET等。很多小偷程序都是使用这个函数。

Curl是一种功能强大的库,支持很多不同的协议、选项,能提供URL请求相关的各种细节信息。

首先,我们得先要确定我们的php是否开启了这个库,你可以使用phpinfo()函数来得到这一信息。

<?php
phpinfo();

如果你可以在网页上看到下面的输出,那么表示curl库已被开启。



如果你没有看到的话,那么你需要设置你的php并开启这个库。如果你是在windows平台下,那么非常的简单,你需要改一改你的php.ini文件的设置,并找到php_curl.dll,并取消前面的分号注释就行了。

//取消下面的注释

extension=php_curl.dll

如果你是在linux下面,那么,你需要重新编译你的php了,编辑时,你需要打开编译参数,在configure命令上加上“--with-curl-”参数。

为什么要用curl?

是的,我们可以通过其他办法获取网页内容。大多数时候,都直接用简单的php函数:

$content = file_get_contents("http://127.0.0.1/demo1.txt");
$content = file("http://127.0.0.1/demo1.txt");
$content = readfile("http://127.0.0.1/demo1.txt");

不过,这种做法缺乏灵活性和有效的错误处理。而且,你也不能用它完成一些高难度任务——比如处理cookies、验证、表单提交、文件上传等等。

在学习更为复杂的功能之前,先来看一下在PHP中建立curl请求的基本步骤:

//初始化
$ch = curl_init();
//设置选项,包括URL
curl_setopt($ch,CURLOPT_URL,"http://127.0.0.1/demo1.php");
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_HEADER,0);
//执行并获取HTML文档内容
$output = curl_exec($ch);
curl_close($ch);
echo $output;

第二步(也就是curl_setopt())最为重要,一切玄妙均在此。有一长串的curl参数可供设置,他们能指定URL请求的各个细节。要一次性全部看完并理解可能比较困难,所以今天我们只试一下那些更常用也更有用的选项。

你可以加一段检查错误的语句:

$output = curl_exec($ch);
if ($output === FALSE) {
echo "cURL Error: " . curl_error($ch);
}

请注意,比较的时候我们用的是“===FALSE”,而非“==FALSE”。因为我们得区分空输出和布尔值FALSE,后者才是真正的错误。

获取信息:这是另一个可选的设置项,能够在curl执行后获取这一请求相关信息:

$info = curl_getinfo($ch);
//var_dump($info);
echo '获取'. $info['url'] . '耗时'. $info['total_time'] . '秒';

返回的数组中包括了一下信息:

"url" //资源网络地址
"content_type" //内容编码
"http_code" //HTTP状态码
"header_size" //header的大小
"request_size" //请求的大小
"filetime" //文件创建时间
"ssl_verify_result" //SSL验证结果
"redirect_count" //跳转技术
"total_time" //总耗时
"namelookup_time" //DNS查询耗时
"connect_time" //等待连接耗时
"pretransfer_time" //传输前准备耗时
"size_upload" //上传数据的大小
"size_download" //下载数据的大小
"speed_download" //下载速度
"speed_upload" //上传速度
"download_content_length"//下载内容的长度
"upload_content_length" //上传内容的长度
"starttransfer_time" //开始传输的时间
"redirect_time"//重定向耗时

用POST方法发送数据:

当发起GET请求时,数据可以通过“查询字串”(query string)传递给一个URL。

header("content-type:text/html;charset=utf-8");
$url = "http://127.0.0.1/demo1.php";
$post_data = array(
'foo'=>"bar",
'query'=>'Nettuts'
);
//初始化
$ch = curl_init();
//设置选项,包括URL
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$post_data);
//执行并获取HTML文档内容
$output = curl_exec($ch);
if($output === FALSE){
echo "curl error:".curl_error($ch);
}else{
echo $output;
}
curl_close($ch);

文件上传和前面的POST十分相似,因为文件上传表单都是通过POST方法提交的。

header("content-type:text/html;charset=utf-8");
$url = "http://127.0.0.1/demo1.php";
$post_data = array(
'foo'=>"bar",
'upload'=>'@C:/wamp/www/test.zip'
);
//初始化
$ch = curl_init();
//设置选项,包括URL
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$post_data);
//执行并获取HTML文档内容
$output = curl_exec($ch);
if($output === FALSE){
echo "curl error:".curl_error($ch);
}else{
echo $output;
}
curl_close($ch);

如果你需要上传一个文件,只需要把文件路径像一个post变量一样传过去,不过记得在前面加班@符号。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: