ZetCode

PHP curl_init 函数

最后修改日期:2025 年 4 月 11 日

PHP curl_init 函数初始化一个新的 cURL 会话。这是使用 PHP 的 cURL 扩展进行 HTTP 请求的第一步。该函数返回一个用于后续操作的 cURL 句柄。

基本定义

curl_init 函数创建一个新的 cURL 会话句柄。它可以接受一个可选的 URL 参数来初始化带有目标的会话。当不再需要时,必须使用 curl_close() 关闭该句柄。

语法:curl_init(?string $url = null): CurlHandle|false。成功时返回一个 cURL 句柄,失败时返回 FALSE。该句柄与其他 cURL 函数一起使用,例如 curl_setoptcurl_exec

基本 cURL 初始化

此示例展示了初始化 cURL 会话的最简单方法。

basic_init.php
<?php

declare(strict_types=1);

$ch = curl_init();

if ($ch === false) {
    die("Failed to initialize cURL");
}

// Set options and perform operations here

curl_close($ch);

我们不带 URL 初始化 cURL 会话,并检查是否失败。句柄存储在 $ch 中,并且在使用后必须关闭。这是 PHP 中所有 cURL 操作的基础。

带 URL 初始化

此示例演示了使用目标 URL 初始化 cURL。

init_with_url.php
<?php

declare(strict_types=1);

$url = "https://jsonplaceholder.typicode.com/posts/1";
$ch = curl_init($url);

if ($ch === false) {
    die("Failed to initialize cURL");
}

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);

echo $response;

curl_close($ch);

我们将 URL 直接传递给 curl_init,它会自动设置 CURLOPT_URL。当您只需要初始设置 URL 时,这是一个快捷方式。我们仍然单独设置其他选项,例如 CURLOPT_RETURNTRANSFER。

多个 cURL 句柄

此示例展示了如何同时处理多个 cURL 句柄。

multi_handles.php
<?php

declare(strict_types=1);

$ch1 = curl_init("https://jsonplaceholder.typicode.com/posts/1");
$ch2 = curl_init("https://jsonplaceholder.typicode.com/comments/1");

curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);

$response1 = curl_exec($ch1);
$response2 = curl_exec($ch2);

echo "Post: " . $response1 . "\n\n";
echo "Comment: " . $response2;

curl_close($ch1);
curl_close($ch2);

我们为不同的端点初始化了两个独立的 cURL 句柄。每个句柄都维护自己的配置,并且可以独立执行。请记住在完成后关闭所有句柄。

带错误处理的 cURL

此示例演示了 curl_init 的正确错误处理。

error_handling.php
<?php

declare(strict_types=1);

$ch = curl_init("https://nonexistent.example.com");

if ($ch === false) {
    die("Failed to initialize cURL handle");
}

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);

$response = curl_exec($ch);

if ($response === false) {
    echo "cURL Error: " . curl_error($ch);
} else {
    echo $response;
}

curl_close($ch);

我们检查 curl_init 是否失败,并处理执行过程中可能出现的错误。该示例使用一个不存在的域来演示错误场景。正确的错误处理对于健壮的应用程序至关重要。

重用 cURL 句柄

此示例展示了如何重用 cURL 句柄来执行多个请求。

handle_reuse.php
<?php

declare(strict_types=1);

$ch = curl_init();

if ($ch === false) {
    die("Failed to initialize cURL");
}

// First request
curl_setopt($ch, CURLOPT_URL, "https://jsonplaceholder.typicode.com/posts/1");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response1 = curl_exec($ch);

// Second request
curl_setopt($ch, CURLOPT_URL, "https://jsonplaceholder.typicode.com/posts/2");
$response2 = curl_exec($ch);

echo "First post: " . $response1 . "\n\n";
echo "Second post: " . $response2;

curl_close($ch);

我们初始化一个句柄,并通过更改选项将其用于多个请求。这比为每个请求创建新句柄更有效。除非明确更改,否则相同的选项将保持不变。

最佳实践

来源

PHP curl_init 文档

本教程涵盖了 PHP curl_init 函数,并提供了实际示例,展示了其在各种场景下初始化 cURL 会话的用法。

作者

我的名字是 Jan Bodnar,我是一名充满激情的程序员,拥有丰富的编程经验。我自 2007 年以来一直撰写编程文章。至今,我已撰写了 1,400 多篇文章和 8 本电子书。我在教授编程方面拥有十多年的经验。

所有 PHP cURL 教程列表。