2016-02-01 58 views
2

我有一個奇怪的問題,我得到一個400客戶端錯誤:對我從未打開的URL有不良請求,但如果我用我的瀏覽器打開相同的網址,然後關閉它,我突然能夠通過請求訪問它。Python請求客戶端錯誤:錯誤的請求,但在瀏覽器打開網站後有效

這裏是我的代碼:

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,然後之後運行它又一次得到了我期待的清單。

我的第一個想法是,也許NBA阻止了某些類型的請求,可能是這樣嗎?

感謝您的幫助。

回答

1

傳遞一個用戶代理和它的工作:

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}) 
+0

這工作,非常感謝你。你能解釋爲什麼這有效嗎? – trentray03

+0

@ trentray03,有時你需要在提出請求時複製瀏覽器,我想因爲你先在瀏覽器中訪問過,根據你的IP存儲了信息,所以請求在以後工作得很好。 –