You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP7.2 CURL请求无法完成,未使用HTTP2协议且头部异常问题咨询

问题解答

1. PHP cURL未发起HTTP/2请求的原因

PHP cURL扩展默认不会主动启用HTTP/2协商:

  • 终端新版curl默认会在HTTPS请求时自动尝试协商HTTP/2协议,但PHP cURL的默认CURLOPT_HTTP_VERSION参数值为CURL_HTTP_VERSION_NONE,该模式下最高仅会使用HTTP/1.1协议,不会主动发起HTTP/2协商。
  • 要启用HTTP/2支持,需要同时满足两个前提:系统安装的libcurl版本≥7.33.0,且编译时已开启nghttp2依赖支持;PHP版本≥7.0。

修复方式是在代码中新增HTTP/2配置:

// 优先协商HTTP/2,不支持则降级为HTTP/1.1
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2TLS);

2. 请求头与终端cURL存在差异的原因

所有差异都来自两边的默认配置与手动配置的区别:

  • 终端curl的默认请求头仅包含Host、User-Agent: curl/[版本号]、Accept: */*,以及手动指定的x-grau-instancia: 2,不会主动添加其他头字段。
  • 你提供的PHP代码中手动设置了自定义的User-Agent,同时你实际运行的代码(与你贴出的片段不完全一致)额外添加了accept、accept-encoding、accept-language、content-type这些自定义头,才会和终端curl的请求头不一致。

另外补充你请求卡住的可能原因:
你代码中传的x-grau-instancia值为1,和终端测试时传的2不一致,同时目标服务可能对HTTP/1.1的请求存在访问限制,导致请求无响应。

修正后的完整参考代码如下:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://pje.trt15.jus.br/pje-consulta-api/api/processos/dadosbasicos/00114894220185150137');
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'x-grau-instancia: 2',
    'Accept: */*'
]);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, 'DEFAULT:!DH');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'curl/7.58.0');
// 启用HTTP/2协商
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2TLS);
curl_setopt($ch, CURLOPT_VERBOSE, true);
$ping = curl_exec($ch);
// 调试时可以输出错误信息
if(curl_errno($ch)) {
    echo 'cURL错误: ' . curl_error($ch);
}
curl_close($ch);

内容的提问来源于stack exchange,提问作者Bruno Batista

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 01:54:07