【发布时间】:2020-03-12 03:04:47
【问题描述】:
我们在 PHP 应用程序中使用 curl HEAD 请求来验证通用链接的有效性。我们检查状态码只是为了确保用户输入的链接有效。除 LinkedIn 外,所有网站的链接均已成功。
虽然它似乎在本地 (Mac) 工作,但当我们尝试从任何 Ubuntu 服务器发出请求时,LinkedIn 返回 999 状态代码。不是 API 请求,只是一个简单的 curl,就像我们对其他所有链接所做的那样。我们已经在几台不同的机器上进行了尝试,并尝试更改用户代理,但没有成功。如何修改我们的 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-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 请求并且也阻止托管服务提供商?
有没有其他方法可以从使用 PHP 的 Ubuntu 机器检查到linkedin 的链接是否有效,或者是否会导致他们的 404 页面?
【问题讨论】:
-
他们可能已将托管公司列入黑名单以强制他们使用 API。
-
当您通过像 lynx 这样的命令行浏览器加载链接时会发生什么?同样的 HTTP 错误?
-
我用 curl 和 wget 得到 999,但 elinks 从同一个 ip 工作。我的猜测也是他们以某种方式检测到 curl 和 wget。
-
@RichardBernards 与 lynx 相同 999。
-
@ceejayoz 我们尝试了一些不同的托管公司,包括一些较小的精品店。我想下一步是 Virtual Box Ubuntu,看看它是否与操作系统有关,或者他们刚刚阻止了一大堆托管服务提供商的 IP 块。