PHP发起GET API请求时遇"AAR:002 No JWT found"错误求助
问题排查:PHP cURL请求API报"AAR: 002 No JWT Found"错误
核心问题定位
你的代码中HTTP请求头格式错误,这是服务器无法识别JWT的直接原因。
在CURLOPT_HTTPHEADER数组里,你用=>作为头名与值的分隔符,但HTTP标准要求必须用: (冒号加空格)。错误的格式会导致服务器无法解析JWTToken请求头,进而返回"No JWT Found"错误。
修复步骤
1. 修正HTTP请求头格式
将CURLOPT_HTTPHEADER内的内容从:
array( "Content-Type => application/json", "JWTToken => $jwt", "Pragma => akamai-x-get-extracted-values" )
改为符合HTTP标准的写法:
array( "Content-Type: application/json", "JWTToken: $jwt", "Pragma: akamai-x-get-extracted-values" )
2. 验证JWT生成逻辑(可选但建议)
虽然Java/C#环境运行正常,仍建议确认PHP的JWT生成细节:
openssl_sign的算法参数:你传入的'sha256'可替换为PHP官方推荐的OPENSSL_ALGO_SHA256常量,避免字符串参数的兼容性问题。- 对比JWT内容:打印PHP生成的JWT,与Java/C#生成的结果对比,确保头部、负载结构及签名格式完全一致。
3. 调试辅助建议
- 开启cURL调试模式:在
$options数组中添加CURLOPT_VERBOSE => true,查看实际发送的请求头,确认JWTToken已正确传递。 - 本地验证JWT:用离线JWT解析工具检查生成的令牌,确保头部、负载格式合规,签名有效。
修复后的关键代码片段
$options = array( CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_SSLKEY => $privatekey_sslkey, CURLOPT_SSLCERT => $pem, CURLOPT_KEYPASSWD => $sslCertPass, CURLOPT_SSLCERTPASSWD => $sslCertPass, CURLOPT_SSL_VERIFYHOST => 2, CURLOPT_SSL_VERIFYPEER => true, CURLOPT_HTTPHEADER => array( "Content-Type: application/json", "JWTToken: $jwt", "Pragma: akamai-x-get-extracted-values" ), CURLOPT_VERBOSE => true // 可选,用于调试请求细节 );
内容的提问来源于stack exchange,提问作者JeyanthiRanjit
相关产品推荐
相关产品推荐

