クモを書いていると、ライブラリで使用されているデフォルトのUser-Agent
ヘッダーを手動でオーバーライドしない限り、多くのサイトが一般的なHTTPソフトウェアライブラリからヒットすると403エラーを返すことに気付きました。
たとえば、Python HTTPライブラリのデフォルトのユーザーエージェントヘッダーを使用すると、エコノミスト誌はリクエストをブロックします。
$ curl http://www.economist.com/ -A python-requests/2.9.1 --write-out "%{http_code}\n" --silent --output /dev/null
403
$ curl http://www.economist.com/ -A python-Urllib/2.7 --write-out "%{http_code}\n" --silent --output /dev/null
403
しかし、ブラウザのユーザーエージェントを偽造したり、ナンセンスなユーザーエージェントを入れたり、空のユーザーエージェントを提供したりしても、彼らは喜んで私の要求を受け入れます。
$ curl http://www.economist.com/ -A "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/53.0.2785.143 Chrome/53.0.2785.143 Safari/537.36" --write-out "%{http_code}\n" --silent --output /dev/null
200
$ curl http://www.economist.com/ -A '' --write-out "%{http_code}\n" --silent --output /dev/null
200
$ curl http://www.economist.com/ -A banana --write-out "%{http_code}\n" --silent --output /dev/null
200
エコノミストはbiggestのサイトであり、私はこの振る舞いに出くわしましたが、これは唯一のサイトではありません-この動作はよくあるようです。どうして?このブロッキングは、Webサイトの観点からどのような目的に役立ちますか?それは(見当違いで効果のない)セキュリティ対策ですか?ボットからより意味のあるユーザーエージェントを取得しようとしていますか? (しかし、どのような目的のために?)または他の何かがこれらのフィルターを動機づけますか?
これは、他のサイトからコンテンツをスクレイピングする目的でこれらのHTTPライブラリを独自のソフトウェアに埋め込む人が多いためです。これは、著作権侵害の目的で行われることがよくあります。合法で、特定の目的(アーカイバボットや検索ボットなど)向けに設計された適切に作成されたクローラーには、独自のカスタムユーザーエージェント文字列があり、それらを一意に識別します。これに基づいて、これらの種類の制限を自分のサイトに適用する多くの人が抱く一般的な感覚は、これらのライブラリのデフォルトのユーザーエージェント文字列を使用する接続は正当な目的で作成されておらず、誤ってキャッチされたものはおそらく開発者がウェブマスターに連絡することになります。