Pythonのurllib.urlopen()の呼び出しは、ブラウザが受け入れるURLでは動作しません。
質問
私は http://bitbucket.org/tortoisehg/stable/でのFirefoxを指している場合ウィキ/ホーム/リリースノートは、私はHTMLのページを取得し、に。しかし、私はPythonでこれをしようとした場合:
import urllib site = 'http://bitbucket.org/tortoisehg/stable/wiki/Home/ReleaseNotes' req = urllib.urlopen(site) text = req.read()
私は、次の取得ます:
500内部サーバーエラー サーバーは、内部エラーや設定ミスが発生したため、リクエストを完了できませんでした。
私が間違って何をしているのですか?
解決
あなたは何も悪いことをしていない、ビットバケットは、(例えば水銀のクライアントを検出するために)一部のユーザーエージェントの検出を行います。ただ、それは持っていない場合(それを修正するユーザーエージェントを変更サブとしてurllib
)。
あなたはこの問題に関するを埋める必要があります: http://bitbucket.org/jespern/ビットバケット/問題/新しい/ の
他のヒント
あなたは表面上、およびエラーページとして、間違って何もしないしている、彼らは何が起こっているかを説明することができるサーバのログを持つものだからあなたは、サイトの管理者に連絡してくださいと言います。幸い、ビットバケットのサイト管理者は、フレンドリーな集まりです!
ブラウザは別の方法を設定urllibは一方向に、セットヘッダのいくつかのヘッダーまたは組み合わせが存在する疑いなく、サーバー上の問題は、後者の場合にはくすぐられます。あなたは、ヘッダーは、例えば送信されている正確に何を見てみたいことがありFirefoxで放火犯で、あなたは正確にサーバーのバグを分離するまで、それらを再現。ユーザエージェントになるだろうか、いくつかは、そのバグをくすぐります-ishヘッダーを「受け入れる」最も可能性が高い。
私はあなたが何も悪いことをやっているとは思いませんか?あなたのスクリプトは私のためにうまく働いた(「text」は、ブラウザに表示されたものと同じデータが含まれ)ます。