向HEAD请求LinkedIn的999错误代码

时间:2014-12-01 14:57:19

标签: php curl linkedin

我们在PHP应用程序中使用curl HEAD请求来验证通用链接的有效性。我们检查状态代码只是为了确保用户输入的链接有效。除LinkedIn之外,所有网站的链接都已成功。

虽然它似乎在本地工作(Mac),但当我们尝试从任何Ubuntu服务器发出请求时,LinkedIn会返回999状态代码。不是API请求,只是像我们为每个其他链接所做的那样简单的卷曲。我们尝试了几台不同的机器并试图改变用户代理,但没有骰子。如何修改我们的卷曲,以便工作链接返回200?

示例HEAD请求:

curl -I --url https://www.linkedin.com/company/linkedin

Ubuntu机器上的示例响应:

HTTP/1.1 999 Request denied
Date: Tue, 18 Nov 2014 23:20:48 GMT
Server: ATS
X-Li-Pop: prod-lva1
Content-Length: 956
Content-Type: text/html

更好地回应@ alexandru-guzinschi。我们已经尝试屏蔽用户代理。总结我们的试验:

  • Mac机+ Mac UA =>的工作原理
  • Mac机+ Windows UA =>的工作原理
  • Ubuntu远程计算机+(无UA更改)=>的失败
  • Ubuntu远程计算机+ Mac UA =>的失败
  • Ubuntu远程计算机+ Windows UA =>的失败
  • Ubuntu本地虚拟机(在Mac上)+(无UA更改)=>的失败
  • Ubuntu本地虚拟机(在Mac上)+ Windows UA =>的工作原理
  • Ubuntu本地虚拟机(在Mac上)+ Mac UA =>的工作原理

所以现在我认为他们会阻止任何不提供备用UA和 阻止托管服务提供商的curl请求?

有没有其他方法可以检查来自linkedin的链接是否有效,或者它是否会导致他们的404页面,来自使用PHP的Ubuntu机器?

4 个答案:

答案 0 :(得分:19)

看起来他们根据用户代理过滤请求:

$ curl -I --url https://www.linkedin.com/company/linkedin | grep HTTP
HTTP/1.1 999 Request denied

$ curl -A "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3" -I --url https://www.linkedin.com/company/linkedin | grep HTTP
HTTP/1.1 200 OK

答案 1 :(得分:9)

我找到了解决方法, 设置accept-encoding标头很重要:

curl --url "https://www.linkedin.com/in/izman" \
--header "user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36" \
--header "accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" \
--header "accept-encoding:gzip, deflate, sdch, br" \
| gunzip

答案 2 :(得分:3)

似乎LinkedIn过滤了用户代理和IP地址。我在家里和数字海洋节点都试过这个:

curl -A "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3" -I --url https://www.linkedin.com/company/linkedin

从家里我得到200 OK,从我得到999拒绝...

所以你需要像HideMyAss这样的代理服务或其他代理服务(没有经过测试,所以我不能说它是否有效)。 Here是代理服务的良好比较。

或者您可以在家庭网络上设置代理,例如使用Raspberry PI来代理您的请求。 Here就是指南。

答案 3 :(得分:3)

代理会工作,但我认为还有另一种方法。我从AWS和其他云中看到它被IP阻止了。我可以从我的机器发出请求,它运行正常。

我注意到,在云服务的响应中,它返回了浏览器必须执行的一些JS,以便将您带到登录页面。在那里,您可以登录并访问该页面。登录页面仅适用于通过被阻止的IP访问的页面。

如果你使用执行JS的无头客户端,或者直接进入后续链接并提供linkedin用户的凭据,你可以绕过它。