使用LinkedIn API v2分享内容遇504请求超时问题求助
如何修复LinkedIn API v2分享内容的超时及请求错误
我帮你排查了代码里的几个关键问题,这些问题直接导致了请求超时和失败:
核心问题分析与修复步骤
1. Access Token的传递方式完全错误
你现在把access token直接拼在URL末尾,这会让请求的地址变成https://api.linkedin.com/v2/ugcPosts{token},这根本不是LinkedIn的合法API端点,自然会触发超时或无效请求。正确的做法是把token放在Authorization请求头里,格式为Bearer {你的access token}。
2. 缺少JSON请求头与API协议版本头
你发送的是JSON格式的请求体,但没有设置Content-Type: application/json,LinkedIn API无法解析你的请求内容;同时还需要添加X-Restli-Protocol-Version: 2.0.0,这是LinkedIn v2 API强制要求的协议版本头。
3. curl_getinfo调用时机错误
你在curl_exec之前就调用了curl_getinfo,这时候请求还没执行,所以HTTP状态码永远是0,必须把这行代码移到curl_exec之后。
4. URN格式验证
urn:li:person:后面的ID应该是LinkedIn返回的纯字母数字字符串(比如aBcDeF123),如果你的ID包含连字符,大概率是错误的。你可以调用https://api.linkedin.com/v2/me接口获取正确的个人ID,然后拼接成合法的URN。
修复后的完整share方法代码
public function share() { $url = "https://api.linkedin.com/v2/ugcPosts"; $fields = '{ "author": "urn:li:person:' . $this->_urn_id . '", "lifecycleState": "PUBLISHED", "specificContent": { "com.linkedin.ugc.ShareContent": { "shareCommentary": { "text": "Hello World! This is my first Share on LinkedIn!" }, "shareMediaCategory": "NONE" } }, "visibility": { "com.linkedin.ugc.MemberNetworkVisibility": "PUBLIC" } }'; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt($curl, CURLOPT_POSTFIELDS, $fields); // 添加必要的请求头 curl_setopt($curl, CURLOPT_HTTPHEADER, [ 'Authorization: Bearer ' . $this->_access_token, 'Content-Type: application/json', 'X-Restli-Protocol-Version: 2.0.0' ]); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 生产环境建议开启SSL验证 $response = curl_exec($curl); // 移到curl_exec之后获取HTTP状态码 $httpCode = curl_getinfo($curl , CURLINFO_HTTP_CODE); if ($response === false) { $response = curl_error($curl); } echo "HTTP状态码: " . $httpCode . "<br>"; echo stripslashes($response); curl_close($curl); }
额外排查建议
- 权限检查:确保你的应用已经申请了
w_member_social权限,这是发布UGC内容必须的权限,没有这个权限会返回权限错误(即使你拿到了token)。 - 网络排查:如果还是超时,检查你的服务器是否能正常访问LinkedIn的API域名(比如用curl直接测试
curl -v https://api.linkedin.com/v2/me),可能是防火墙、代理或网络运营商的问题。 - 开启调试:可以添加
curl_setopt($curl, CURLOPT_VERBOSE, true);来输出详细的curl请求日志,帮助定位具体的请求问题。
内容的提问来源于stack exchange,提问作者WyllisTM
相关产品推荐
相关产品推荐

