PHP中Curl请求Indeed API提示缺失grant_type参数,但终端执行正常
解决Indeed API获取Token时PHP Curl请求报错"Missing grant_type parameter"的问题
问题核心在于PHP的Curl对CURLOPT_POSTFIELDS参数的处理逻辑:当你传入关联数组时,Curl会自动把请求的Content-Type改成multipart/form-data,但你在headers里声明的是application/x-www-form-urlencoded,这就导致API无法正确解析你传入的参数,所以才会提示缺少grant_type。
而你在Bash里用的curl -d参数,默认就是把数据编码成application/x-www-form-urlencoded格式,所以能成功。
修复方案
把POST数据数组用http_build_query()函数转换成URL编码的字符串,再传给CURLOPT_POSTFIELDS。
修改你的PHP代码有两种方式:
方式1:在调用函数时转换数据
$token = http( $indeed_api, http_build_query($indeed_secrets), // 转换数组为URL编码字符串 $headers );
方式2:在http函数内部处理
function http($url, $data, $headers) { $curl = curl_init(); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_URL, $url); // 判断如果是数组,自动转换为URL编码字符串 curl_setopt($curl, CURLOPT_POSTFIELDS, is_array($data) ? http_build_query($data) : $data); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($curl); curl_close($curl); return $result; }
验证修改后的请求
修改后,PHP Curl会和Bash里的curl行为一致,把POST数据编码成application/x-www-form-urlencoded格式,API就能正确识别grant_type等参数,成功返回access token。
内容的提问来源于stack exchange,提问作者GhostOrder
相关产品推荐
相关产品推荐

