使用 Python 的请求库时,对合法 url 的 400 错误请求

400 Bad Request for legitimate url when using Python's Request library

我正在尝试使用 Python 的请求库从对 requests.get():

的调用中获取 JSON 对象
import requests

url = 'http://stats.nba.com/stats/boxscoretraditionalv2'+\
'?EndPeriod=10&EndRange=28800&GameID=0021500893&RangeType=0'+\
'&Season=2015-16&SeasonType=Regular+Season&StartPeriod=1'+\
'&StartRange=0'

# is the auth necessary?
response = requests.get(url, auth=('user', 'pass'))

我得到以下异常:

Traceback (most recent call last):
  File "sample.py", line 22, in <module>
    response.raise_for_status() # raise exception if invalid response
  File "/Library/Python/2.7/site-packages/requests/models.py", line 840, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: http://stats.nba.com/stats/boxscoretraditionalv2?EndPeriod=10&EndRange=28800&GameID=0021500893&RangeType=0&Season=2015-16&SeasonType=Regular+Season&StartPeriod=1&StartRange=0

我需要做什么才能解决这个问题? link 有效 - 如果通过 Chrome.

查看,它只是将 JSON 和 returns 渲染为 200 OK

将 headers 添加到您的请求中:

import requests

url = 'http://stats.nba.com/stats/boxscoretraditionalv2'+\
'?EndPeriod=10&EndRange=28800&GameID=0021500893&RangeType=0'+\
'&Season=2015-16&SeasonType=Regular+Season&StartPeriod=1'+\
'&StartRange=0'

headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:39.0) Gecko/20100101 Firefox/39.0'}

response = requests.get(url, headers=headers)

NBA.com 的管理员决定向没有 User-Agent 看起来像普通浏览器的用户发送 HTTP 400(可能是为了减少抓取)。