999 HEAD 请求LinkedIn上的错误代码

2022-08-30 10:32:40

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

虽然它似乎在本地(Mac)工作,但当我们尝试从任何Ubuntu服务器请求时,LinkedIn返回999状态代码。不是API请求,只是一个简单的卷曲,就像我们对其他每个链接所做的那样。我们已经在几台不同的机器上尝试过,并尝试更改用户代理,但没有骰子。如何修改我们的 curl,以便工作链接返回 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-古津斯基。我们已尝试屏蔽用户代理。总结一下我们的试验:

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

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

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


答案 1

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

$ 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

答案 2

我找到了解决方法,设置接受编码标头很重要:

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

推荐