摘要:支持创建的库,能够连接通讯各种服务器使用各种协议。目前支持的协议有。在一些复杂的请求中,不能够设置请求头代理认证等相关信息,更不能向某个服务器提交表单数据,上传文件。文件类型可在文件名后以的格式指定。
概述 简介
在设计之初,cURL (Client URL Library)是一种作为使用 URL 语法传输数据的命令行工具。通过 cURL 库,我们可以在 PHP 脚本中自由地使用某种协议来获取或者提交数据,比如获取 HTTP 请求数据。简单的来说,cURL 是客户端向服务器请求资源的工具。
</>复制代码
PHP 支持 Daniel Stenberg 创建的 libcurl 库,能够连接通讯各种服务器、使用各种协议。libcurl 目前支持的协议有 http、https、ftp、gopher、telnet、dict、file、ldap。 libcurl 同时支持 HTTPS 证书、HTTP POST、HTTP PUT、 FTP 上传(也能通过 PHP 的 FTP 扩展完成)、HTTP 基于表单的上传、代理、cookies、用户名+密码的认证。
优势
在 PHP 中,想要获取某个 URL 的内容其实很简单,有多种实现方法,比如使用 file_get_contents() 函数:
</>复制代码
虽然 file_get_contents() 函数使用起来很方便,但是不够灵活,也没法进行错误处理。在一些复杂的请求中,不能够设置请求头、Cookie、代理、认证等相关信息,更不能向某个服务器提交表单数据,上传文件。
cURl 库不但支持丰富的网络协议,而且提供了设置各种 URL 请求参数的方法,功能强大。cURL 的使用场景有很多,比如访问网页资源,获取 WebService 接口数据、下载 FTP 服务器文件。
使用
基本步骤
要使用 cURL 来发送 URL 请求,步骤大体分为以下四步:
初始化 cURL 会话;
设置请求选项;
执行 cURL 会话;
关闭 cURL 会话。
</>复制代码
// 1. 初始化 cURL 会话
$ch = curl_init();
// 2. 设置请求选项
curl_setopt($ch, CURLOPT_URL, "https://segmentfault.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); # 获取的信息以字符串返回,而不是直接输出
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); # 禁止 cURL 验证对等证书,从而支持 HTTPS 访问
// 3. 执行 cURL 会话
$response = curl_exec($ch);
var_dump($response);
// 4. 关闭 cURL 会话
curl_close($ch);
</>复制代码
cURL 主要通过 curl_setopt() 函数设置请求选项,具体的每个选项说明请见 http://php.net/manual/zh/func...
错误处理
通过 curl_error() 函数可以查看 cURL 会话错误详情,而 curl_getinfo() 函数可以查看响应信息。因此,通过这两个函数我们可以实现一个简单的错误处理程序,比如我们现在访问一个不存在的 URL 地址:
</>复制代码
实战案例
1. POST 请求
使用 cURL 模拟发送 POST 请求:
</>复制代码
$url,
CURLOPT_RETURNTRANSFER => 1, # 获取的信息以字符串返回
CURLOPT_POST => 1, # 发送 POST 请求
CURLOPT_POSTFIELDS => $data, # POST 请求数据
]);
$response = curl_exec($ch);
curl_close($ch);
return $response;
}
$url = "http://localhost/test.php";
$data = ["id" => 1, "username" => "jochen"];
echo curl_post($url, $data);
2. 文件上传
</>复制代码
CURLOPT_POSTFIELDS:全部数据使用 HTTP 协议中的 "POST" 操作来发送。 要发送文件,在文件名前面加上@前缀并使用完整路径。 文件类型可在文件名后以 ";type=mimetype" 的格式指定。 这个参数可以是 urlencoded 后的字符串,类似"val1=1&val2=2&...",也可以使用一个以字段名为键值,字段数据为值的数组。
通过 cURL 发送 POST 请求来实现文件上传:
</>复制代码
$url,
CURLOPT_RETURNTRANSFER => 1, # 获取的信息以字符串返回
CURLOPT_POST => 1, # 发送 POST 请求
CURLOPT_POSTFIELDS => $data, # POST 请求数据
]);
$response = curl_exec($ch);
curl_close($ch);
return $response;
}
$url = "http://localhost/test.php";
$data = ["id" => 1, "file" => "@/root/image/boy.jpg"];
echo curl_post($url, $data);
3. 文件下载
其实,文件下载与普通 GET 请求是一样的,只是文件下载把返回内容保存至文件中,而不是简单的输出。配合 file_put_contents() 函数实现文件下载:
</>复制代码
$url,
CURLOPT_RETURNTRANSFER => 1, # 获取的信息以字符串返回
]);
$response = curl_exec($ch);
curl_close($ch);
return file_put_contents($path, $response);
}
curl_download("http://localhost/boy.jpg", "./boy.jpg");
4. HTTP 认证
如果服务器端需要验证请求,设置 CURLOPT_USERPWD 参数即可:
</>复制代码
$url,
CURLOPT_USERPWD => "$user:$passwd", # 格式为:"[username]:[password]"
CURLOPT_RETURNTRANSFER => 1
]);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
echo curl_auth("http://localhost", "jochen", "password");
5. 模拟登录
这里主要展示模拟登录使用了 Cookie 来保持登录状态的应用。首先我们需要通过账号密码登录获取到 Cookie 数据,然后利用已登录的 Cookie 获取页面数据:
</>复制代码
$url,
CURLOPT_POST => 1, # 发送 POST 请求
CURLOPT_POSTFIELDS => $data, # POST 请求数据
CURLOPT_COOKIEJAR => $cookie # 将 cookie 信息保存至文件中
CURLOPT_RETURNTRANSFER => 1, # 获取的信息以字符串返回
]);
$response = curl_exec($ch);
curl_close($ch);
return $response;
}
// 获取页面数据
function curl_content($url, $cookie) {
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_COOKIEFILE => $cookie # 加载包含 Cookie 数据的文件
CURLOPT_RETURNTRANSFER => 1, # 获取的信息以字符串返回
]);
$response = curl_exec($ch);
curl_close($ch);
return $response;
}
$post = ["username" => "jochen", "password" => "123456"];
$cookie = "./cookie.txt";
if (curl_login("http://localhost/login", $post, $cookie)) {
echo curl_content("http://localhost", $cookie);
}
cURL 封装库
PHP Curl Class 是一个编写得很好的 cURL 封装库,它可以非常方便地发送 HTTP 请求并与任何类型的 Web API 集成。PHP Curl Class 封装库适用于 PHP 5.3,5.4,5.5,5.6,7.0,7.1 和 HHVM。这个库是众所周知的,并提供了一个非常简单的语法:
</>复制代码
get("https://www.example.com/");
if ($curl->error) {
echo "Error: " . $curl->errorCode . ": " . $curl->errorMessage . "
";
} else {
echo "Response:" . "
";
var_dump($curl->response);
}
参考文章:
Client URL 库
php中的curl使用入门教程和常见用法实例
在PHP中使用CURL,“撩”服务器只需几行——php curl详细解析和常见大坑
Top 7: Best Curl Wrapper Libraries for PHP
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/28555.html
摘要:说明这里用到的项目都是基于的项目。但同时,它和其他的分布式文件系统的区别也是很明显的。能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。放宽了一部分约束,来实现流式读取文件系统数据的目的。是项目的一部分。 关键词 Java、PHP、hdfs、mqrocket、excel、poi、报表 需求背景 在业务需求方面,每个企业或多或少都会有报表导出的作业,量少则可是使用输出流或者字符串的...
摘要:说明这里用到的项目都是基于的项目。但同时,它和其他的分布式文件系统的区别也是很明显的。能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。放宽了一部分约束,来实现流式读取文件系统数据的目的。是项目的一部分。 关键词 Java、PHP、hdfs、mqrocket、excel、poi、报表 需求背景 在业务需求方面,每个企业或多或少都会有报表导出的作业,量少则可是使用输出流或者字符串的...
摘要:目前支持和协议。除此以外,还能在可能的字符编码之间相互进行编码转换。如果启用了这个功能,输入字符编码可能将自动转换成。这些可能在未来增加。 前言 PHP7即将在12月3日正式发布,而RC8是已经差不多稳定了的版本,后续的GA版本主要都是在修复bug,所以为了未来开发环境的升级,准备尝试安装一下。 PHP7.0.0将在12月3日正式发布,但是12月2日时github已经发布出PHP-7...
阅读 1752·2021-11-15 11:37
阅读 3497·2021-09-28 09:44
阅读 1750·2021-09-07 10:15
阅读 2869·2021-09-03 10:39
阅读 2765·2019-08-29 13:20
阅读 1370·2019-08-29 12:51
阅读 2281·2019-08-26 13:44
阅读 2200·2019-08-23 18:02