PHP支持的由Daniel Stenberg创建的libcurl库允许你与各种的服务器使用各种类型的协议进行连接和通讯。
cURL 是一个功能强大的库,支持多种协议,包括:
为了使用PHP的cURL函数,你需要安装 libcurl 包。
// 检查cURL扩展是否可用
if (function_exists('curl_version')) {
$curl_version = curl_version();
echo "cURL 版本: " . $curl_version['version'];
} else {
echo "cURL 扩展未安装";
}
要使用PHP的cURL支持你必须在编译PHP时加上 --with-curl[=DIR] 选项,DIR为包含lib和include的目录路径。
在include目录中必须有一个名为curl,包含了easy.h和curl.h的文件夹。lib文件夹里应该有一个名为libcurl.a的文件。
sudo apt-get install php-curl
sudo service apache2 restart
sudo yum install php-curl
sudo service httpd restart
在php.ini文件中取消注释或添加:extension=curl
| 函数 | 描述 | 版本 |
|---|---|---|
| curl_init() | 初始化一个cURL会话。 | PHP 4.0.2+ |
| curl_setopt() | 设置一个cURL传输选项。 | PHP 4.0.2+ |
| curl_setopt_array() | 为cURL传输会话批量设置选项。 | PHP 5.1.3+ |
| curl_exec() | 执行一个cURL会话。 | PHP 4.0.2+ |
| curl_getinfo() | 获取一个cURL连接资源句柄的信息。 | PHP 4.0.4+ |
| curl_error() | 返回最后一次的错误字符串。 | PHP 4.0.3+ |
| curl_errno() | 返回最后一次的错误号。 | PHP 4.0.3+ |
| curl_close() | 关闭一个cURL会话。 | PHP 4.0.2+ |
| curl_multi_init() | 返回一个新cURL批处理句柄。 | PHP 5+ |
| curl_multi_add_handle() | 向curl批处理会话中添加单独的curl句柄。 | PHP 5+ |
| curl_multi_exec() | 运行当前 cURL 句柄的子连接。 | PHP 5+ |
| curl_multi_getcontent() | 如果设置了CURLOPT_RETURNTRANSFER,则返回获取的输出的文本流。 | PHP 5+ |
| curl_multi_info_read() | 获取当前解析的cURL的相关传输信息。 | PHP 5+ |
| curl_multi_remove_handle() | 移除curl批处理句柄资源中的某个句柄资源。 | PHP 5+ |
| curl_multi_close() | 关闭一组cURL句柄。 | PHP 5+ |
| curl_multi_select() | 等待所有cURL批处理中的活动连接。 | PHP 5+ |
| curl_multi_setopt() | 为cURL批处理会话设置选项。 | PHP 5.5+ |
| curl_multi_strerror() | 返回描述错误代码的字符串文本。 | PHP 5.5+ |
| curl_pause() | 暂停及恢复连接。 | PHP 5.5+ |
| curl_reset() | 重置一个cURL会话句柄的所有的选项。 | PHP 5.5+ |
| curl_escape() | 使用 URL 编码给定的字符串。 | PHP 5.5+ |
| curl_unescape() | 解码 URL 编码后的字符串。 | PHP 5.5+ |
| curl_strerror() | 返回错误代码的字符串描述。 | PHP 5.5+ |
| curl_copy_handle() | 复制一个cURL句柄和它的所有选项。 | PHP 5+ |
| curl_version() | 获取cURL版本信息。 | PHP 4.0.2+ |
| curl_file_create() | 创建一个 CURLFile 对象。 | PHP 5.5+ |
// 初始化cURL
$ch = curl_init();
// 设置选项
curl_setopt($ch, CURLOPT_URL, "https://api.example.com/data");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
// 执行请求
$response = curl_exec($ch);
// 检查错误
if (curl_errno($ch)) {
echo 'cURL错误: ' . curl_error($ch);
}
// 获取请求信息
$info = curl_getinfo($ch);
echo 'HTTP状态码: ' . $info['http_code'];
// 关闭cURL
curl_close($ch);
// 输出响应
echo $response;
$ch = curl_init();
$postData = array(
'name' => 'John Doe',
'email' => 'john@example.com',
'message' => 'Hello World'
);
curl_setopt_array($ch, array(
CURLOPT_URL => 'https://api.example.com/submit',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $postData,
CURLOPT_HTTPHEADER => array(
'Content-Type: application/x-www-form-urlencoded',
'Authorization: Bearer your_token_here'
)
));
$response = curl_exec($ch);
if (curl_errno($ch)) {
echo '错误: ' . curl_error($ch);
}
curl_close($ch);
// 创建多cURL句柄
$mh = curl_multi_init();
$handles = [];
$urls = [
'https://api.example.com/user/1',
'https://api.example.com/user/2',
'https://api.example.com/user/3'
];
foreach ($urls as $url) {
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
]);
curl_multi_add_handle($mh, $ch);
$handles[] = $ch;
}
// 执行并发请求
$running = null;
do {
curl_multi_exec($mh, $running);
curl_multi_select($mh);
} while ($running > 0);
// 获取所有响应
$responses = [];
foreach ($handles as $ch) {
$responses[] = curl_multi_getcontent($ch);
curl_multi_remove_handle($mh, $ch);
curl_close($ch);
}
curl_multi_close($mh);
print_r($responses);