如何通过 PHP 搜索 Linkedin?

Posted

技术标签:

【中文标题】如何通过 PHP 搜索 Linkedin?【英文标题】:How can I search into Linkedin by PHP? 【发布时间】:2017-11-12 22:14:32 【问题描述】:

我有一个 php 脚本,它使用 CURL 打开 http 请求:(如果需要,它也接受标头)

   $c = curl_init();
curl_setopt($c, CURLOPT_URL, $url);
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
if ($post_paramtrs) 
    curl_setopt($c, CURLOPT_POST, TRUE);
    curl_setopt($c, CURLOPT_POSTFIELDS, "var1=bla&" . $post_paramtrs);

curl_setopt($c, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($c, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; rv:33.0) Gecko/20100101 Firefox/33.0");
curl_setopt($c, CURLOPT_COOKIEJAR, $dirname . 'cookief.txt');
curl_setopt($c, CURLOPT_COOKIEFILE, $dirname . 'cookief.txt');
curl_setopt($c, CURLOPT_MAXREDIRS, 10);
$follow_allowed = (ini_get('open_basedir') || ini_get('safe_mode')) ? false : true;
if ($follow_allowed) 
    curl_setopt($c, CURLOPT_FOLLOWLOCATION, 1);

curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 9);
curl_setopt($c, CURLOPT_REFERER, $url);
curl_setopt($c, CURLOPT_TIMEOUT, 60);
curl_setopt($c, CURLOPT_AUTOREFERER, true);
curl_setopt($c, CURLOPT_ENCODING, 'gzip,deflate');
$data = curl_exec($c);
$status = curl_getinfo($c);
curl_close($c);

它也有效。现在,我想得到linkedin的搜索结果。 Here 是您可以搜索的页面。如您所见,它发送一个 ajax 请求来获取数据。例如,如果你想搜索Peter,它会发送这个请求:

https://www.linkedin.com/voyager/api/typeahead/hits?q=blended&query=Peter

但是当你手动打开它时,它会失败并抛出这个错误:

CSRF 检查失败。

这意味着我必须将这个令牌与请求一起传递:


我的问题是什么?我怎样才能找到那个令牌?注意到它在 DOM 中不存在。它会由JS创建吗?无论如何,你对我有什么线索吗?

【问题讨论】:

你在 cookie 中有这个 CSRF 令牌,名称为 JSESSIONID 您找到解决方法了吗?我很想知道你是否成功 有了python,我可以做到! 用 python,我可以做到,如果有人对 python 脚本感兴趣,请告诉我。不过我没有在php中尝试过! @Satys 是的,有兴趣知道如何做到这一点 【参考方案1】:

搜索 API 不适用于匿名用户,因此您需要在执行此请求之前登录并获取有效的身份验证 cookie。

登录并从 cookie 中获取令牌:li_at

最后,像这样传递 cookie 和 CSRF 令牌:

GET https://www.linkedin.com/voyager/api/typeahead/hits?q=blended&query=Peter 

cookie: JSESSIONID=NotImportant;li_at=GRAB_IT_FROM_COOKIE;
csrf-token: NotImportant

LinkedIn 服务器会检查JSESSIONIDcsrf-token 是否相等,所以它的值并不重要。

您可以在 curl 中使用 CURLOPT_HTTPHEADER 轻松添加自定义标头来请求

【讨论】:

以上是关于如何通过 PHP 搜索 Linkedin?的主要内容,如果未能解决你的问题,请参考以下文章

如何手动清除 LinkedIn 共享者的缓存

如何在搜索时单击向我们建议的第一个元素

如何在php中添加社交关注按钮

如何从电子邮件地址获取 Linkedin 的头像

领英Linkedin信息搜集工具InSpy

基于 Kafka 和 ElasticSearch,LinkedIn是如何构建实时日志分析系统的?