2016-11-05 6 views
3

私は私がここで間違ってやっているかを把握しようとしていますが、私は迷子に保つ...のpython要求HTTPレスポンス500(サイトは、ブラウザでアクセスできます)

のpython 2.7で、私が実行していますよ次のコード:

>>> import requests 
>>> req = requests.request('GET', 'https://www.zomato.com/praha/caf%C3%A9-a-restaurant-z%C3%A1ti%C5%A1%C3%AD-kunratice-praha-4/daily-menu') 
>>> req.content 
'<html><body><h1>500 Server Error</h1>\nAn internal server error occured.\n</body></html>\n' 

ブラウザでこのファイルを開くと、正しく応答します。私は掘り出して、urllibライブラリ(500 error with urllib.request.urlopen)で同様のものを見つけましたが、私はそれを適応させることができません。さらにここでリクエストを使用したいと思います。

ここでは、プロキシの設定が不足している可能性があります(たとえば、Perl File::Fetch Failed HTTP response: 500 Internal Server Error)。誰かが私に説明してもらえますか、これには適切な回避策はありますか?

+0

他のページをリクエストしましたか?おそらく、FirefoxからのUser-Agentヘッダーやそのようなものを追加する必要があるかもしれません。なぜなら、このページはPythonリクエストライブラリによるクエリに応答しないからです。 – Maurice

+0

このページをブラウザに読み込んだときにネットワークログに何が起きているかを見ると、ブラウザにコンテンツを動的にレンダリングするReactアプリケーションは少なくとも一部です。あなたは '要求'でそれを直接掻き回すことはほとんどありません。 –

+0

@Maurice:はい、持っていました。私はいくつかの問題を抱えているだけで、残りは働いています... –

答えて

4

ブラウザリクエストと異なる点は、User-Agentです。

url = 'https://www.zomato.com/praha/caf%C3%A9-a-restaurant-z%C3%A1ti%C5%A1%C3%AD-kunratice-praha-4/daily-menu' 
headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.90 Safari/537.36'} 
response = requests.get(url, headers=headers) 
print(response.status_code) #should be 200 
+0

ヘッダーの提案をありがとう、それは私のために働く... –

1

User-Agentと他のヘッダー要素は、問題の原因となっている可能性があります。

このエラーが発生したとき、私はWiresharkを使用しているブラウザからの定期的なリクエストを見て、そこにあると思われるヘッダのUser-Agent以外のものがあることが判明しました。

Pythonリクエストでブラウザから送信されたヘッダーをエミュレートした後、サーバーはエラーをスローしませんでした。

関連する問題