Curl HEADリクエストをPHPアプリケーションで使用して、汎用リンクの有効性を検証します。リンクがユーザーが入力したものは有効であり、LinkedInを除くすべてのWebサイトへのリンクは成功しています。
ローカル(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にもう少し良く反応する。ユーザーエージェントをマスクしようとしました。トライアルを要約するには:
だから今、私は彼らが代替UAを提供しないカールリクエストをブロックし、alsoホスティングプロバイダーをブロックすると考えていますか?
Linkedinへのリンクが有効かどうか、またはPHPを使用するUbuntuマシンから404ページが表示されるかどうかを確認する方法は他にありますか?
彼らはユーザーエージェントに基づいてリクエストをフィルタリングしているようです:
$ 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
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
プロキシは機能しますが、別の方法があると思います。 AWSやその他のクラウドから、IPによってブロックされていることがわかります。私は自分のマシンからリクエストを発行することができ、それはうまく機能します。
クラウドサービスからの応答で、ブラウザがログインページに移動するために実行しなければならないJSを返すことがわかりました。そこにログインすると、ページにログインしてアクセスできます。ログインページは、ブロックされたIPを介してアクセスするユーザー専用です。
JSを実行するヘッドレスクライアントを使用する場合、または後続のリンクに直接移動して、リンクされたユーザーの資格情報を提供する場合、それをバイパスできる場合があります。
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、DOから999拒否されました...
したがって、 HideMyAss などのプロキシサービスが必要です(テストしていないため、有効かどうかはわかりません)。 ここ は、プロキシサービスの適切な比較です。
または、ホームネットワークにプロキシを設定することもできます。たとえば、Raspberry Piを使用してリクエストをプロキシします。 ここ はそのガイドです。