我遇到一个奇怪的问题,我得到一个400客户端错误:我从未打开的网址上的错误请求,但是如果我用浏览器打开相同的网址然后关闭它,我就是一个突然能够通过请求访问它。
这是我的代码:
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
但是在我访问chrome中的url然后再次运行它后,我得到了我希望的列表。
我的第一个想法是,NBA可能阻止某些类型的请求,可能就是这样吗?
感谢您的帮助。
答案 0 :(得分:2)
传递用户代理,它将起作用:
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})