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 请求的基本信息。
<?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 数组包含有关传输的许多其他有用的指标。
检查特定信息
此示例演示如何获取特定信息。
<?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 数组更有效。
测量请求时间
此示例显示如何测量请求的各种时间指标。
<?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 是直到第一个字节的时间。这些有助于识别瓶颈。
检查重定向信息
此示例演示如何获取有关重定向的信息。
<?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 证书详细信息。
<?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 以数组形式返回详细的证书信息。
最佳实践
- 调用时机:始终在 curl_exec 之后调用以获得准确的数据。
- 特定选项:使用特定选项以获得更好的性能。
- 错误检查:在获取信息之前验证 curl_exec 是否成功。
- 日志记录:对于调试和监控请求很有用。
- 性能:如果不需要,请避免获取整个 info 数组。
来源
本教程通过实际示例介绍了 PHP 的 curl_getinfo
函数,展示了如何检索 cURL 传输的各种指标。