2017-06-01 82 views
1

我试图通过使用python请求包来使用NBA STATS api中的播放。我一直在跑超时错误,所以我用cURL试了一下。请求超时,cURL不会

下面是单场比赛我试图获得请求的URL:

http://stats.nba.com/stats/playbyplayv2?EndPeriod=10&GameID=0021500492&StartPeriod=1 

你可以去这个链接,检查出来,一切都在为此工作。

我试着对这个链接做一个cURL请求,它超时了。最后,我逐个插入请求标题作为cURL参数,直到它工作。

curl -X GET -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" -H "User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:53.0) Gecko/20100101 Firefox/53.0" -H "Accept-Language: en-US,en;q=0.5" -H "Accept-Encoding: gzip, deflate" "http://stats.nba.com/stats/playbyplayv2?EndPeriod=10&GameID=0021500492&StartPeriod=1" 

这是我在请求查询:

pars = {'Accept-Encoding': 'gzip, deflate'\ , 'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:53.0) Gecko/20100101 Firefox/53.0'\ , 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'\ , 'Accept-Language':'en-US,en;q=0.5'} response = requests.get('http://stats.nba.com/stats/playbyplayv2?EndPeriod=10&GameID=0021500492&StartPeriod=1'\ , params=pars)

我要么需要通过请求获得蟒蛇这个工作,或者找出这样一种方式,卷曲做到这一点,我可以(a)根据循环中文件/文件名中的文本填写GameID部分,并(b)将其保存为正确目录(不是工作目录)中的json。

任何想法?有没有基于urllib的解决方案?

回答

2

您将标题信息作为参数传递。你需要通过标题。

import requests 

headers = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:53.0) 
Gecko/20100101 Firefox/53.0'} 

params = { 
    'EndPeriod': 10, 
    'GameID': '0021500492', 
    'StartPeriod': 1 
} 
r = requests.get("http://stats.nba.com/stats/playbyplayv2", params=params, 
headers=headers) 
print(r.json()) 

在请求params为用于参数信息的API来传递,以使API来处理他们的最终你的要求。鉴于标题用于验证或解释您的请求。

+0

啊,这是有道理的。感谢您澄清! – riders994