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 是PHP8.2新增的常量,被赋整型值 10486234。该常量在全局命名空间中声明
向下兼容性影响
CURLINFO_EFFECTIVE_METHOD 是一个新的 PHP 常量。虽然可以补丁的方式在PHP旧版本中声明该常量,但是 curl_getinfo 函数不接受该参数,会返回 false。
该常量和函数只对用 Curl 7.72.0 以上编译的 PHP 有效。