2016-01-31 23 views
1

我想在python中使用请求做一个get请求,但我得到一个400错误的请求错误。但是,当我在同一个网址上执行wget或curl时,它会起作用。这里是我的代码:Python中的GET请求不好请求,但wget和卷曲工作

daily_scoreboard_url = 'http://stats.nba.com/stats/scoreboardV2?DayOffset=0&LeagueID=00&gameDate=01/12/2016' 
scoreboard_response = requests.get(daily_scoreboard_url) 
scoreboard_response.raise_for_status() 

然而,当我尝试像

curl 'http://stats.nba.com/stats/scoreboardV2?DayOffset=0&LeagueID=00&gameDate=01/12/2016' 
wget 'http://stats.nba.com/stats/scoreboardV2?DayOffset=0&LeagueID=00&gameDate=01/12/2016' 

它工作的事情。我也尝试了使用get请求从stats.nba.com中获取其他内容,并且它工作正常。

teamslist_url = 'http://stats.nba.com/stats/leaguedashteamstats?Conference=&DateFrom=&DateTo=&Division=&GameScope=&GameSegment=&LastNGames=0&LeagueID=00&Location=&MeasureType=Base&Month=0&OpponentTeamID=0&Outcome=&PORound=0&PaceAdjust=N&PerMode=PerGame&Period=0&PlayerExperience=&PlayerPosition=&PlusMinus=N&Rank=N&Season=2015-16&SeasonSegment=&SeasonType=Regular+Season&ShotClockRange=&StarterBench=&TeamID=0&VsConference=&VsDivision=' 
teamslist_response = requests.get(teamslist_url) 
teamslist_response.raise_for_status() 

回答

2

您需要give requests a user-agent

>>> headers = {'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36'} 
>>> scoreboard_response = requests.get(daily_scoreboard_url, headers=headers) 
>>> scoreboard_response 
<Response [200]> 

这是该网站的错,不是reuqests的。某些网站需要用户代理来检查您是否是人或机器人/脚本。

但是,我们可以手动设置用户代理。在这个例子中,这是我的Chrome的用户代理。

+0

谢谢,这工作!但出于好奇,为什么我不需要其他网址的用户代理来运行? – birna

+1

@birna:正如我所说的,*某些网站需要用户代理来检查您是否是人类或bot /脚本。*似乎本网站不允许没有用户代理的请求。它由网站的所有者设置。 –