PHP用Curl请求LinkedIn API V2返回空OAuth2令牌错误如何解决
问题排查&修复方案
已确认的异常点
- 请求URL参数未闭合:你当前使用的请求地址最后缺少1个右括号,完整正确的地址应为
https://api.linkedin.com/v2/me?projection=(id,firstName,lastName,profilePicture(displayImage~:playableStreams)),缺失右括号会导致LinkedIn后端解析参数时抛出字符串索引越界异常,对应你收到的java.lang.StringIndexOutOfBoundsException错误。 - 多余的请求头配置:GET请求无请求体,不需要设置
content-type: application/json,部分API服务端会对多余的请求头做校验拦截,可能导致请求异常。 - 授权令牌识别异常:
- 先确认
$accessBearerToken变量实际有有效值,不存在拼写错误、作用域未传递的问题,你可以临时打印该变量值做校验 - 建议拼接授权头时先对令牌做去首尾空白处理,防止令牌前后存在空格、换行符导致服务端识别为空令牌,对应你收到的
Empty OAuth2 access token错误
- 先确认
修复后代码
$curl = curl_init(); //CURL version: 7.29, PHP version: 7.4.26 // 调试用:确认令牌有效值,调试完成可删除 // var_dump($accessBearerToken);exit; curl_setopt_array($curl, array( // 补全URL的闭合括号 CURLOPT_URL => 'https://api.linkedin.com/v2/me?projection=(id,firstName,lastName,profilePicture(displayImage~:playableStreams))', CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_TIMEOUT => 300, CURLOPT_CUSTOMREQUEST => "GET", // 移除多余的content-type头,授权头拼接trim后的令牌 CURLOPT_HTTPHEADER => array( "Accept: application/json", "Authorization: Bearer ".trim($accessBearerToken) ), )); $response = curl_exec($curl); // 调试用:打印请求错误信息和请求详情,调试完成可删除 // if(curl_errno($curl)){ // var_dump(curl_error($curl)); // } // var_dump(curl_getinfo($curl)); curl_close($curl);
内容的提问来源于stack exchange,提问作者Emil Garder
相关产品推荐
相关产品推荐

