PHP 8.2 新特性: Curl: curl_getinfo 函数支持 CURLINFO_EFFECTIVE_METHOD
Curl 扩展提供了一个叫 curl_getinfo()
返回指定的 Curl 传输的信息。PHP 8.2 开始, curl_getinfo
函数返回请求的有效方法,这个有效方法可能与初始的请求方法不同(比如,从 HTTP POST 请求变成 GET 请求 )。
如果调用 curl_getinfo()
函数时不带参数,它会返回关于该传输的所有可用信息。在 PHP 8.2 后,返回的数组包含带有有效方法 key 的值,包含了 HTTP 请求的有效方法名。
另外,可以通过传入 CURLINFO_EFFECTIVE_METHOD
常量到 curl_getinfo()
函数中检索有效方法的值。
这一特性只有在 PHP Curl 是用 Curl v7.72.0 以上版本编译而来的情况下可行。
用例
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://example.com');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
$info = curl_getinfo($ch);
var_dump($info);
array(38) {
["url"]=> string(20) "https://example.com/"
["content_type"]=> string(24) "text/html; charset=UTF-8"
["http_code"]=> int(200)
...
["total_time_us"]=> int(1029949)
+ ["effective_method"]=> string(3) "GET"
}
当目标服务器发出重定向响应时,这个有效方法信息是有用的, Curl 配置。比如,大部分网页表单提交按照 Post-重定向-Get 模式进行,服务器会在表单提交后向同一 URL 发送重定向响应。在这种情况下,effective_method
字段会包含正确的有效方法(GET),跟初始请求方法(POST) 相反。
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://example.com');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
$info = curl_getinfo($ch, CURLINFO_EFFECTIVE_METHOD);
var_dump($info);
string(3) "GET"
CURLINFO_EFFECTIVE_METHOD
常量
CURLINFO_EFFECTIVE_METHOD
是 PHP 8.2 新增的常量,被赋整型值 10486234。该常量在全局命名空间中声明
向后兼容性影响
CURLINFO_EFFECTIVE_METHOD
是一个新的 PHP 常量。虽然可以补丁的方式在 PHP 旧版本中声明该常量,但是 curl_getinfo
函数不接受该参数,会返回 false
。
该常量和函数只对用 Curl 7.72.0
以上编译的 PHP 有效。