cha*_*ons 34 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
Run Code Online (Sandbox Code Playgroud)
回应@ alexandru-guzinschi好一点.我们已经尝试屏蔽用户代理.总结我们的试验:
所以现在我认为他们阻止任何不提供备用UA并且还阻止托管服务提供商的卷曲请求?
有没有其他方法可以检查来自使用PHP的Ubuntu机器的链接是否有效,或者它是否会导致他们的404页面?
Ale*_*chi 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
Run Code Online (Sandbox Code Playgroud)
And*_*man 10
我找到了解决方法,对设置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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
从家里我得到了 200 OK,从 DO 得到了 999 Denied...
所以你需要像HideMyAss或其他这样的代理服务(还没有测试它,所以我不能说它是否有效)。这是代理服务的一个很好的比较。
或者您可以在家庭网络上设置代理,例如使用 Raspberry PI 来代理您的请求。这是相关指南。