摘要:支持创建的库,能够连接通讯各种服务器使用各种协议。目前支持的协议有。在一些复杂的请求中,不能够设置请求头代理认证等相关信息,更不能向某个服务器提交表单数据,上传文件。文件类型可在文件名后以的格式指定。
概述 简介
在设计之初,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...
阅读 1620·2021-11-15 11:37
阅读 3361·2021-09-28 09:44
阅读 1621·2021-09-07 10:15
阅读 2761·2021-09-03 10:39
阅读 2660·2019-08-29 13:20
阅读 1264·2019-08-29 12:51
阅读 2182·2019-08-26 13:44
阅读 2110·2019-08-23 18:02