WithCoderWithCoderWithCoder

PHP中curl的简介

    之前做C#,Java,在处理Http请求时,都有对应的request类库。这段时间在学习使用PHP,发现了一个非常简单的库cURL。通过cURL,我们能在php程序中自由地发送HTTP请求到某个url来获取或者提交数据,并且它能够连接通讯各种服务器、使用各种协议,比如http、https、FTP、Telnet以及SMTP等,同时支持 HTTPS 证书、HTTP POST、HTTP PUT、 FTP 上传(也能通过 PHP 的 FTP 扩展完成)、HTTP 基于表单的上传、代理、cookies、用户名+密码的认证等。在本文中,将简单介绍在php中cURL的简单概念。

    在php中我们可以通过file_get_contents,fopen,file或者readfile等函数来获取某个url的内容,如下:   

// file_get_contents将内取到一字符串
$content = file_get_contents("http://www.baidu.com");
// file将内取到一个数组
$contArr = file("http://www.baidu.com");
// readfile取文件并写入到
readfile("http://www.baidu.com");

    在某些情况下,以上函数使用起来很方便。但是在遇到要在php程序中向某个服务器提交表单数据,上传文件,处理cookies或者认证等任务时,以上函数就无法胜任这些处理了。这个时候,我们就可以使用cURL实现这些功能。正如文章开头所说,cURl支持很多的网络协议,而且提供了关于url请求的函数。

    cURL的使用步骤

    要使用cURL来发送url请求,大体分为以下四步:

    1. 执行初始化   

    2. 设置请求选项

    3. 执行一个cURL会话并且获取相关回复

    4. 释放cURL句柄,关闭一个cURL会话   

<?php
// 1. 初始化cURL会话
$ch = curl_init();

// 2. 选项, 包括求的url
curl_setopt($ch, CURLOPT_URL, "http://www.baidu.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 1 - 如果成功,会将http响应果返回,不自动输出任何,如果失返回false。返回的果就是第3步中的$response
curl_setopt($ch, CURLOPT_HEADER, 0); // 是否返回信息 0:否,1:是

// 3. cURL会话并取相
// 行后可返回,如果curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0),返回http响应
$response = curl_exec($ch);

// 4. cURL句柄,关闭cURL会话
curl_close($ch);

    cURL功能的强大之处,正是体现在第二个步骤中。我们可以通过curl_setopt根据需要灵活地设置请求选项,具体选项设置,可以参考官方文档:https://www.php.net/manual/zh/function.curl-setopt.php

    错误处理

    在上述代码中,我们可以增加错误处理的代码:   

$response = curl_exec($ch);
if ($response === FALSE) {
   echo "cURL 错误信息: " . curl_error($ch);
}

    注意:在做上述判断时需要使用===,因为请求的回复可能是空字符串,curl在请求出错的情况下回返回FALSE值,所以我们必须使用===,而不是==。

    获取cURL请求的具体信息

    在执行一个cURL请求后,也可以使用curl_getinfo()函数获取该请求的具体信息:

$response = curl_exec($ch);
if ($response === FALSE) {
   echo "cURL 错误信息: " . curl_error($ch);
}
$curl_info = curl_getinfo($ch);
echo "收到的httpcode{$curl_info['http_code']}


欢迎分享交流,转载请注明出处:WithCoder » PHP中curl的简介