ZetCode

PHP curl_getinfo 函数

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

PHP 的 curl_getinfo 函数用于检索有关 cURL 传输的信息。它提供诸如响应代码、时间和其他元数据之类的详细信息。这对于调试和记录 HTTP 请求非常有用。

基本定义

curl_getinfo 函数返回有关上次 cURL 传输的信息。它接受一个 cURL 句柄和一个可选的信息参数。如果省略第二个参数,它将以数组形式返回所有可用信息。

语法:curl_getinfo(CurlHandle $handle, ?int $option = null): mixed。该函数应在 curl_exec 之后调用。不同的选项会返回传输的特定信息。

获取基本请求信息

此示例演示如何获取 cURL 请求的基本信息。

basic_info.php
<?php

declare(strict_types=1);

$ch = curl_init();

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

$response = curl_exec($ch);
$info = curl_getinfo($ch);

echo "HTTP Code: " . $info['http_code'] . "\n";
echo "Total Time: " . $info['total_time'] . " seconds\n";
echo "URL: " . $info['url'] . "\n";

curl_close($ch);

此代码获取 GET 请求的信息。我们检索 HTTP 状态码、总请求时间以及最终 URL。info 数组包含有关传输的许多其他有用的指标。

检查特定信息

此示例演示如何获取特定信息。

specific_info.php
<?php

declare(strict_types=1);

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://jsonplaceholder.typicode.com/posts");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);

$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
$size = curl_getinfo($ch, CURLINFO_SIZE_DOWNLOAD);

echo "HTTP Status: $httpCode\n";
echo "Content Type: $contentType\n";
echo "Download Size: $size bytes\n";

curl_close($ch);

我们使用常量选项获取特定信息。CURLINFO_HTTP_CODE 获取响应状态,CURLINFO_CONTENT_TYPE 获取内容类型标头,CURLINFO_SIZE_DOWNLOAD 获取下载大小。这比获取整个 info 数组更有效。

测量请求时间

此示例显示如何测量请求的各种时间指标。

timing_info.php
<?php

declare(strict_types=1);

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://jsonplaceholder.typicode.com/users");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
$info = curl_getinfo($ch);

echo "Name Lookup Time: " . $info['namelookup_time'] . "s\n";
echo "Connect Time: " . $info['connect_time'] . "s\n";
echo "Pretransfer Time: " . $info['pretransfer_time'] . "s\n";
echo "Start Transfer Time: " . $info['starttransfer_time'] . "s\n";
echo "Total Time: " . $info['total_time'] . "s\n";

curl_close($ch);

我们测量请求的各种时间方面。名称查找时间是 DNS 解析时间,连接时间是 TCP 握手时间,pretransfer 是直到传输开始的时间,start transfer 是直到第一个字节的时间。这些有助于识别瓶颈。

检查重定向信息

此示例演示如何获取有关重定向的信息。

redirect_info.php
<?php

declare(strict_types=1);

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://example.com"); // Redirects to https
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

$response = curl_exec($ch);
$info = curl_getinfo($ch);

echo "Final URL: " . $info['url'] . "\n";
echo "Redirect Count: " . $info['redirect_count'] . "\n";
echo "Redirect Time: " . $info['redirect_time'] . "s\n";
echo "Original URL: " . $info['original_url'] . "\n";

curl_close($ch);

我们跟踪一个会重定向的 URL 的重定向信息。最终 URL 显示我们最终到达的位置,redirect_count 显示重定向次数,redirect_time 显示花费在重定向上的总时间。为此必须启用 FOLLOWLOCATION。

获取 SSL 证书信息

此示例显示如何检索 SSL 证书详细信息。

ssl_info.php
<?php

declare(strict_types=1);

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://example.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);

$response = curl_exec($ch);
$info = curl_getinfo($ch);

echo "SSL Verify Result: " . $info['ssl_verify_result'] . "\n";
echo "SSL Version: " . $info['ssl_version'] . "\n";
echo "Certificate Info:\n";
print_r(curl_getinfo($ch, CURLINFO_CERTINFO));

curl_close($ch);

我们检索有关安全连接的 SSL/TLS 信息。ssl_verify_result 显示证书验证状态,ssl_version 显示协议版本。CURLINFO_CERTINFO 以数组形式返回详细的证书信息。

最佳实践

来源

PHP curl_getinfo 文档

本教程通过实际示例介绍了 PHP 的 curl_getinfo 函数,展示了如何检索 cURL 传输的各种指标。

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

所有 PHP cURL 教程列表。