web-dev-qa-db-ja.com

私は人間ではないことをGoogleはどのように知っていますか?

スタックオーバーフローについて CURLを使用してGoogleスプレッドシートにアクセスすることについて質問しました 。これは、有効なユーザーエージェント文字列を設定している場合でも、もう不可能だと思われます。その発見から生じる私の質問は次のとおりです。

有効なユーザーエージェント文字列を介してCURLで送信されたリクエストがブラウザからのものではないことをGoogleはどのように知るのですか?

1
DudeOnRock

Googleに尋ねなければ、確実に知る方法は本当にありません。ただし、ユーザーエージェントとは別に、Webブラウザーから定期的に送信されるが、通常curl要求では省略される特定の一般的に使用されるHTTPヘッダーを探している可能性があります。これには以下が含まれますが、これらに限定されません。

  • cookies-保存されたCookie。セッションまたはログイン資格情報が含まれる場合があります
  • referer-元のページ
  • accept-処理できるコンテンツのタイプ
  • accept-language-読むことができる言語
  • accept-encoding-サポートするデータエンコーディング
  • キャッシング関連のヘッダー
  • セキュリティ関連のヘッダー
  • その他...

これらのヘッダーはほとんどの場合オプションです。ただし、ヘッダーを送信すると、サーバーが可能な限り最良の応答を行うのに役立つため、通常はブラウザーが送信します。賢いサイトでは、通常のブラウザーを使用するクライアントとcurlなどのダウンローダーを使用するクライアントの違いを判断する方法として、共通ヘッダーの欠如を使用できます。特に、Googleのようなサイトでは、ほとんどの一般的なブラウザにどのような動作が予想されるのかを十分に把握するのに十分なトラフィックが得られます。

そうは言っても、個人的にはGoogleスプレッドシートがカールをブロックしようとしているとは思えません。むしろ、おそらくcurlリクエストに残されている必要なヘッダーがあります。 curlの--headerオプションを使用すると、実際のブラウザの動作をよりよく模倣するために、必要なヘッダーをcurl要求に追加できます。

4
pimlottc