Python Requests Client Error: плохой запрос, но работает после открытия сайта в браузере


У меня странная проблема, когда я получаю ошибку клиента 400: плохой запрос на url, который я никогда не открывал, но затем, если я открою этот же url с помощью браузера, а затем закрою его, я внезапно смогу получить доступ к нему с запросами.

Вот мой код:

import requests
url = 'http://stats.nba.com/stats/boxscore?GameID=0021500669&RangeType=0&StartPeriod=0&EndPeriod=0&StartRange=0&EndRange=0'
response = requests.get(url)
response.raise_for_status() # raise exception if invalid response
data = response.json()['resultSets'][0]['rowSet']
print data

Если я запускаю это перед посещением веб-сайта в браузере, я получаю эту ошибку:

Traceback (most recent call last):
File "stackOverflow.py", line 5, in <module>
response.raise_for_status() # raise exception if invalid response
File "C:\Python27\lib\site-packages\requests\models.py", line 851, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request

Но после того, как я посещаю url-адрес в chrome, а затем запускаю его снова, я получаю список, на который надеялся.

Моя первая мысль может быть, НБА блокирует некоторые типы запросов, может быть, это так?

Спасибо за помощь.

1   2   2016-02-01 21:28:47

1 ответ:

Передайте user-agent, и он будет работать:

u_a = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36"
response = requests.get(url, headers={"USER-AGENT":u_a})