## 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、用户名+密码的认证。
更多关于 CURL 请参考:[传送门](http://php.net/manual/zh/book.curl.php)
使用 CURL 函数的基本步骤:
* 首先使用 curl_init() 初始化 cURL会话。
* 接着通过 curl_setopt() 设置需要的全部选项。
* 然后使用 curl_exec() 来执行会话。
* 最后使用 curl_close() 关闭会话。
### CURL 发送 HTTP 请求
```
<?php
class HttpClient
{
private $url = ''; // url
private $body = []; // 请求正文
private $headers = []; // 请求头
public function __construct($url = null)
{
if ($url) {
$this->setUrl($url);
}
}
/**
* 设置URL
* @param string $url
*/
public function setUrl($url)
{
$this->url = $url;
}
/**
* 添加请求头信息
* @param string $header
*/
public function setHeader($header)
{
$this->headers[] = $header;
}
/**
* 构造消息正文
* @param array
*/
private function setBody($data)
{
$this->body = $data;
}
/**
* GET 请求
* @return array
*/
public function get()
{
return this->request();
}
/**
* POST 请求
* @param array $data
* @return array
*/
public function post($data = [])
{
$this->setHeader('Expect:');
$this->setBody($data);
return $this->request();
}
private function request()
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
if ($this->headers) {
curl_setopt($ch, CURLOPT_HTTPHEADER, $this->headers);
}
if ($this->body) {
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $this->body);
}
$response = curl_exec($ch);
curl_close($ch);
list($headers, $content) = explode("\r\n\r\n", $response);
return [
'headers' => $headers,
'content' => $content,
];
}
}
$http = new HttpClient('http://forum-api.local/test');
/* ------------- 发送 GET 请求 ------------ */
$response = $http->get();
var_dump($response['headers']);
var_dump($response-['content']);
exit();
/* ------------- 发送 POST 请求 ------------ */
$data = [
'name' => 'kate green',
'age' => 12,
];
$response = $http->post($data);
var_dump($response['headers']);
var_dump($response['content']);
?>
```
- 基本语法
- PHP标记
- 指令分隔符
- 从HTML中分离
- 注释
- 数据类型
- 布尔值
- 整数
- 浮点数
- 字符串
- 数组
- 对象
- 资源
- 空值
- 变量
- 基础
- 预定义变量
- 变量范围
- 可变变量
- 常量
- 常量语法
- 魔术常量
- 运算符
- 算术运算符
- 赋值运算符
- 位运算符
- 比较运算符
- 递增与递减运算符
- 逻辑运算符
- 字符串运算符
- 数组运算符
- 类型运算符
- 流程控制
- if条件结构
- switch条件结构
- while循环结构
- do-while循环结构
- for循环结构
- foreach循环结构
- 包含文件
- 函数
- 自定义函数
- 可变函数
- 匿名函数
- 递归函数
- 类与对象
- 基本概念
- 属性
- 方法
- 类常量
- 构造函数和析构函数
- 访问控制
- 继承
- 抽象类
- 接口
- Trait
- 重载
- 对象遍历
- 魔术方法
- Final关键字
- 命名空间
- 自动加载
- 错误处理
- 错误显示
- 错误日志
- 错误报告
- 自定义错误处理
- 异常处理
- 异常处理机制
- 扩展异常处理类
- 字符操作
- 数组操作
- 时间操作
- 表单操作
- GET提交
- POST提交
- 文件上传
- 会话控制
- COOKIE操作
- SESSION操作
- 文件操作
- 文件属性
- 读取文件
- 写入文件
- 文件管理
- 文件锁
- 目录处理
- 路径处理
- 网络操作
- HTTP协议
- Socket操作
- CURL操作
- PDO操作
- 介绍
- 连接管理
- 预处理语句
- 事务处理
- 错误处理
- 图像操作
- 正则表达式
- 标准推荐
- 包管理器
- 设计模式
- 常用算法
- 安全防御
- XSS防御
- CSRF防御