curl_init

(PHP 4 >= 4.0.2, PHP 5, PHP 7, PHP 8)

curl_init初始化一个 cURL 会话

描述

curl_init(?string $url = null): CurlHandle|false

初始化一个新的会话,并返回一个 cURL 句柄,用于与 curl_setopt()curl_exec()curl_close() 函数一起使用。

参数

url

如果提供,CURLOPT_URL 选项将设置为其值。您可以使用 curl_setopt() 函数手动设置此选项。

注意:

如果设置了 open_basedir,则 cURL 会禁用 file 协议。

返回值

成功时返回一个 cURL 句柄,错误时返回 false

变更日志

版本 描述
8.0.0 成功时,此函数现在返回一个 CurlHandle 实例;之前,返回一个 resource
8.0.0 url 现在可以为空。

示例

示例 #1 初始化一个新的 cURL 会话并获取一个网页

<?php
// 创建一个新的 cURL 资源
$ch = curl_init();

// 设置 URL 和其他适当的选项
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);

// 获取 URL 并传递给浏览器
curl_exec($ch);

// 关闭 cURL 资源,并释放系统资源
curl_close($ch);
?>

参见

添加一个注释

用户贡献的注释 2 notes

2
NextgenThemes
1 年前
这可能很明显,但

请注意,使用单个实例执行一系列 curl 请求比为每个请求创建新实例要快得多。
-7
VictorWumble
8 个月前
NextgenThemes 的注释适用于非常有限的情况。为了完整起见,让我们考虑以下代码片段

<?php

/*
您的 localhost 拥有一个默认的 Apache,它只返回“It works!”
*/

$repeatCount = 1000;

// 开始部分
// 这部分很慢

// 调用 localhost,每次创建一个新的句柄
$time = microtime(true);
foreach (
range(1, $repeatCount) as $ignored) {
$ch = curl_init("http://localhost");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
// 对响应进行一些操作
unset($response);
curl_close($ch);
}
unset(
$ch);
$elapsed = microtime(true) - $time;
echo
"重新创建 curl 句柄,耗时: " . $elapsed . "\n";

// 结束部分

// 开始部分
// 这部分快得多

// 调用 localhost,但重用句柄
$time = microtime(true);
$ch = curl_init("http://localhost");
foreach (
range(1, $repeatCount) as $ignored) {
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
// 对响应进行一些操作
unset($response);
}
curl_close($ch);
$elapsed = microtime(true) - $time;
echo
"重用 curl 句柄,耗时: " . $elapsed . "\n";

// 结束部分

/*
示例输出:
重新创建 curl 句柄,耗时: 11.289301872253
重用 curl 句柄,耗时: 0.53790807723999
*/

?>

以上代码支持 NextgenThemes 的说法,但是“按顺序发送 curl 请求”的方法通常不必要地慢,因为
- 网络传输时间(例如 100ms)
- 远程处理时间(例如 50ms)
- 通常,不需要按特定顺序发送请求

因此,在实践中,当您需要同时发送多个 curl 请求时,只需使用 curl_multi_init 方法。除非您有非常特殊的需要,否则不要考虑“按顺序发送 curl 请求”的方法。
To Top