如何通过LinkedIn API获取个人主页全部历史帖子并解决/share接口报错问题
问题根因
你添加了X-HTTP-Method-Override: BATCH_GET请求头,触发了LinkedIn的RESTli协议隧道请求校验规则,这类请求要求参数必须以application/x-www-form-urlencoded格式放在请求体中,你当前把参数全部拼接在URL查询串中,没有符合要求的请求体,所以触发400报错。
解决方案
查询单个人的所有动态不需要用到BATCH_GET请求,直接用标准GET请求即可,修改代码如下:
$url = "https://api.linkedin.com/v2/shares?q=owners&owners=urn:li:person:".$linked_profile['id']; // 不需要X-HTTP-Method-Override和额外的Content-Type头,GET请求不需要指定Content-Type $headers = [ 'X-Restli-Protocol-Version: 2.0.0', 'Authorization: Bearer ' . $_SESSION['linkedin_access_token'] ]; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 20); // 明确指定请求方法为GET,避免cURL误判 curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); $result = curl_exec($ch); curl_close($ch); $result = json_decode($result, true);
补充注意事项
- 确保你的应用已经申请了对应权限:拉取个人账号动态需要
r_member_social权限,拉取组织账号动态需要r_organization_social权限,权限审核通过后接口才能正常返回数据。 - 如果需要直接返回帖子的图片、视频等媒体内容,可以在请求URL后追加投影参数,就不用二次调用接口查询媒体信息,参数示例:
&projection=(elements*(id,created,lastModified,owner,text,content(*,media(*))))。 - 如果你确实需要批量查询多个主体的动态,才需要使用BATCH_GET,此时需要将请求方法改为POST,所有查询参数放到
application/x-www-form-urlencoded格式的请求体中,不能拼接在URL上。
内容的提问来源于stack exchange,提问作者Nikunj Munjani
相关产品推荐
相关产品推荐

