単純な要求を行う場合、python(正確には、Entought Canopy))で、urllib2を使用すると、サーバーは私にアクセスを拒否します。
data = urllib.urlopen(an url i cannot post because of reputation, params)
print data.read()
エラー:
Access denied | play.pokemonshowdown.com used CloudFlare to restrict access
The owner of this website (play.pokemonshowdown.com) has banned your access based on your browser's signature (14e894f5bf8d0920-ua48).
これは明らかに一般的な問題なので、ウェブ上でいくつかの手がかりを見つけました。
ファイアウォール、プロキシ、ブラウザプラグインまたは拡張機能が誤検知をスローしている可能性があります。サイトにアクセスする別の方法として、別のブラウザーでサイトにアクセスしてみてください。
「アクセスする前にブラウザーを確認する(insertsite.com)は、サイトの所有者が「I'm Under Attack」と呼ばれるDDoS保護および軽減ツールをオンにしたときに発生します。通常、ページは消え、5日後にサイトへのアクセスを許可します秒。
注:チェックに合格するには、ブラウザでJavaScriptとCookieの両方を有効にする必要があります。このチェックは、ボットネットに参加していないことを確認するためのものです。」
この1つを除いて、答えはかなり明確です... *私はブラウザーを使用していません!リクエストは、pythonプログラム、urllib.urlopen
リクエスト ...
これは、... Enthought CanopyでCookieとJavaScriptをオンにする必要があるということですか?この文は何か文になりますか?プログラミングコンソールからの基本的なリクエストでサイトにアクセスしようとすると、このブラウザー固有のチェックがアクティブになることについてはほとんど理解できません。そして、それが私があなたの助けを求める理由です。
なぜそれが起こるのですか?それをバイパスするには?
このサイトが「チェック」しているのはブラウザではなく、「ユーザーエージェント」-クライアントプログラムの文字列(ブラウザ、Pythonスクリプトなど))最終的にはリクエストヘッダーとして送信されます。別のユーザーエージェントを指定できます、cf Curling user agent on urllib2.urlopen 。