curl_getinfo

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

curl_getinfo获取一个cURL连接资源句柄的信息

说明

curl_getinfo(CurlHandle $handle, ?int $option = null): mixed

获取最后一次传输的相关信息。

参数

handle

curl_init() 返回的 cURL 句柄。

option

这个参数可能是以下常量之一:

选项 说明
CURLINFO_CAINFO 默认内置 CA 证书路径
CURLINFO_CAPATH 默认内置 CA 路径字符串
CURLINFO_EFFECTIVE_URL 最后一个有效的 URL
CURLINFO_HTTP_CODE 最后的响应代码。自 cURL 7.10.8 起,这是 CURLINFO_RESPONSE_CODE 的旧别名
CURLINFO_FILETIME 启用了 CURLOPT_FILETIME 后检索文档的远程时间;如果返回 -1,则文档的时间未知
CURLINFO_TOTAL_TIME 最后一次传输的总事务时间(以秒为单位)
CURLINFO_NAMELOOKUP_TIME 到名称解析完成所需的时间(以秒为单位)
CURLINFO_CONNECT_TIME 建立连接所需的时间(以秒为单位)
CURLINFO_PRETRANSFER_TIME 从启动到文件准备要传输所需的时间(以秒为单位)
CURLINFO_STARTTRANSFER_TIME 从启动到传输第一个字节之前所需的时间(以秒为单位)
CURLINFO_REDIRECT_COUNT 启用 CURLOPT_FOLLOWLOCATION 选项后的重定向次数
CURLINFO_REDIRECT_TIME 在启用 CURLOPT_FOLLOWLOCATION 选项后,最终事务开始之前所有重定向步骤的时间(以秒为单位)
CURLINFO_REDIRECT_URL 禁用 CURLOPT_FOLLOWLOCATION 选项:重定向 URL 在上次事务中找到,接下来应该手动请求。在启用 CURLOPT_FOLLOWLOCATION 选项的情况下,此值为空。在这种情况下,重定向的 URL 可以在 CURLINFO_EFFECTIVE_URL 中获取
CURLINFO_PRIMARY_IP 最近连接的 IP 地址
CURLINFO_PRIMARY_PORT 最近一次连接的目标端口
CURLINFO_LOCAL_IP 最近连接的本地(源)IP 地址
CURLINFO_LOCAL_PORT 最近连接的本地(源)端口
CURLINFO_SIZE_UPLOAD 上传的总字节数
CURLINFO_SIZE_DOWNLOAD 下载的总字节数
CURLINFO_SPEED_DOWNLOAD 平均下载速度
CURLINFO_SPEED_UPLOAD 平均上传速度
CURLINFO_HEADER_SIZE 检索到的所有 header 总大小
CURLINFO_HEADER_OUT 发送请求的字符串。为此,通过调用 curl_setopt()CURLINFO_HEADER_OUT 选项添加到句柄
CURLINFO_REFERER referrer header
CURLINFO_REQUEST_SIZE 已发出请求的总大小,当前仅针对 HTTP 请求
CURLINFO_RETRY_AFTER 来自 Retry-After: header 的信息,如果没有有效的 header,则为 0。
CURLINFO_SSL_VERIFYRESULT 通过设置 CURLOPT_SSL_VERIFYPEER 请求的 SSL 认证验证结果
CURLINFO_CONTENT_LENGTH_DOWNLOAD Content-Length: 字段中读取的下载内容长度
CURLINFO_CONTENT_LENGTH_UPLOAD 指定上传大小
CURLINFO_CONTENT_TYPE Content-Type: 所请求文档的类型。NULL 表示服务器没有发送有效的 Content-Type: header
CURLINFO_PRIVATE 与此 cURL 句柄关联的私有数据,之前使用 curl_setopt()CURLOPT_PRIVATE 选项设置
CURLINFO_PROXY_ERROR 当最近的传输返回 CURLE_PROXY 错误时,会返回详细的(SOCKS)代理错误代码。返回的值将恰好是 CURLPX_* 值之一。如果没有响应代码可用,错误代码将是 CURLPX_OK
CURLINFO_RESPONSE_CODE 最后的响应代码
CURLINFO_HTTP_CONNECTCODE CONNECT 响应代码
CURLINFO_HTTPAUTH_AVAIL 位掩码表示根据先前响应可用的身份验证方法
CURLINFO_PROXYAUTH_AVAIL 位掩码表示根据先前响应可用的代理身份验证方法
CURLINFO_OS_ERRNO 来自连接失败的 Errno。该数字是操作系统和系统特定的。
CURLINFO_NUM_CONNECTS curl 为实现先前的传输所必须创建的连接数
CURLINFO_SSL_ENGINES 支持 OpenSSL 加密引擎
CURLINFO_COOKIELIST 所有已知的 cookie
CURLINFO_FTP_ENTRY_PATH FTP 服务器中的入口路径
CURLINFO_APPCONNECT_TIME 从开始到 SSL/SSH 完成与远程主机的连接/握手所花费的时间(以秒为单位)
CURLINFO_CERTINFO TLS 证书链
CURLINFO_CONDITION_UNMET 未满足时间条件的信息
CURLINFO_RTSP_CLIENT_CSEQ 下一个 RTSP 客户端 CSeq
CURLINFO_RTSP_CSEQ_RECV 最近检索到的 CSeq
CURLINFO_RTSP_SERVER_CSEQ 下一个 RTSP 服务器端 CSeq
CURLINFO_RTSP_SESSION_ID RTSP 会话 ID
CURLINFO_CONTENT_LENGTH_DOWNLOAD_T 下载的内容长度。此值从 Content-Length: 字段读取。如果大小未知则为 -1
CURLINFO_CONTENT_LENGTH_UPLOAD_T 上传的指定大小。如果未知则为 -1
CURLINFO_HTTP_VERSION 返回最后一次 HTTP 连接中使用的版本。返回值将是定义的 CURL_HTTP_VERSION_* 常量之一,如果无法确定版本,则返回 0。
CURLINFO_PROTOCOL 在最后一个 HTTP 连接中使用的协议。返回值将会是 CURLPROTO_* 中的一个值
CURLINFO_PROXY_SSL_VERIFYRESULT 请求的证书验证结果(使用 CURLOPT_PROXY_SSL_VERIFYPEER 选项)。仅用于 HTTPS 代理
CURLINFO_SCHEME 最近连接使用的 URL 协议
CURLINFO_SIZE_DOWNLOAD_T 已下载的总字节数。此数值仅针对最新的传输,并且在每次新的传输时都将会重置
CURLINFO_SIZE_UPLOAD_T 上传的总字节数
CURLINFO_SPEED_DOWNLOAD_T curl 测量的完整下载速度的平均值,以字节/秒为单位
CURLINFO_SPEED_UPLOAD_T curl 测量的完整上传速度的平均值,以字节/秒为单位
CURLINFO_APPCONNECT_TIME_T 从开始到与远程主机 SSL/SSH 连接/握手完成所经过的时间,以微秒为单位
CURLINFO_CONNECT_TIME_T 从开始到与远程主机(或代理)建立连接完成所经过的总时间,以微秒为单位
CURLINFO_FILETIME_T 检索的文档的远程时间(Unix 时间戳),是 CURLINFO_FILETIME 的替代值,允许具有 32 bit 变量的系统提取超出 32 bit 时间戳范围之外的日期
CURLINFO_NAMELOOKUP_TIME_T 从开始到名称解析完成的时间(以微秒为单位)
CURLINFO_PRETRANSFER_TIME_T 从开始到文件传输即将开始的时间,以微秒为单位
CURLINFO_REDIRECT_TIME_T 在最终事务开始之前,所有重定向步骤(包括名称查找、连接、预传输和传输)所花费的总时间,以微秒为单位。
CURLINFO_STARTTRANSFER_TIME_T 从开始到接收到第一个字节所花费的时间(以微秒为单位)
CURLINFO_TOTAL_TIME_T 上次传输的总时间(以微秒为单位),包括名称解析、TCP 连接等。

返回值

如果指定 option,将返回它的值。否则将返回包含下列元素的关联数组(分别对应 option),失败时为 false

  • "url"
  • "content_type"
  • "http_code"
  • "header_size"
  • "request_size"
  • "filetime"
  • "ssl_verify_result"
  • "redirect_count"
  • "total_time"
  • "namelookup_time"
  • "connect_time"
  • "pretransfer_time"
  • "size_upload"
  • "size_download"
  • "speed_download"
  • "speed_upload"
  • "download_content_length"
  • "upload_content_length"
  • "starttransfer_time"
  • "redirect_time"
  • "certinfo"
  • "primary_ip"
  • "primary_port"
  • "local_ip"
  • "local_port"
  • "redirect_url"
  • "request_header"(只有在之前调用 curl_setopt() 设置 CURLINFO_HEADER_OUT 后才会设置)
注意,私有数据不包含在关联数组中,必须使用 CURLINFO_PRIVATE 选项单独检索。

示例

示例 #1 curl_getinfo() 示例

<?php
// 创建 cURL 句柄
$ch = curl_init('http://www.example.com/');

// 执行
curl_exec($ch);

// 检查是否有错误发生
if (!curl_errno($ch)) {
$info = curl_getinfo($ch);
echo
'Took ', $info['total_time'], ' seconds to send a request to ', $info['url'], "\n";
}

// 关闭句柄
curl_close($ch);
?>

示例 #2 使用 option 参数的 curl_getinfo() 示例

<?php
// 创建 cURL 句柄
$ch = curl_init('http://www.example.com/');

// 执行
curl_exec($ch);

// 检测 HTTP 状态码
if (!curl_errno($ch)) {
switch (
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE)) {
case
200: # OK
break;
default:
echo
'Unexpected HTTP code: ', $http_code, "\n";
}
}

// 关闭句柄
curl_close($ch);
?>

注释

注意:

如果重新使用句柄,则保留此函数收集的信息。这意味着除非此函数在内部覆盖统计信息,否则将返回以前的信息。