使用urllib2调用NYT时间事件api时的HTTPError 596

时间:2012-10-21 00:12:39

标签: python urllib2 urllib asp.net-web-api

我正在尝试使用urllib2调用NYT事件api,但我收到了596错误。如果我自己构建url,没有问题,但如果我用数据调用urlopen,我会收到596错误。这是怎么回事? 596错误似乎没有记录,因此没有用。

>>> data = urllib.urlencode({'api-key': os.environ['NYT_EVENT_LISTING_API_KEY']})  
>>> resp = urllib2.urlopen('?'.join([url,data]))
>>> resp = urllib2.urlopen(url, data)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 126, in urlopen
    return _opener.open(url, data, timeout)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 400, in open
response = meth(req, response)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 513, in http_response
'http', request, response, code, msg, hdrs)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 438, in error
    return self._call_chain(*args)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 372, in _call_chain
    result = func(*args)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 521, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) 
HTTPError: HTTP Error 596: 

2 个答案:

答案 0 :(得分:2)

@Thomas是对的,你在第一个请求中使用GET,它将构建如下所示的URL:

nytimes.com/api/?MY_API_KEY

但是,您对urllib2.urlopen的第二次通话会将data作为POST请求发送到此网址

nytimes.com/api/

相反,它为您提供 596服务未找到错误


现在,urllib2因其非直观的API和文档而臭名昭着,您可以考虑使用Requests代替:

import requests

api_key = {'api-key': os.environ['NYT_EVENT_LISTING_API_KEY']}
resp = requests.get(url, params=api_key)
print resp.text
print resp.json

这样,GET请求和POST请求更容易区分,url和参数也会分开。

答案 1 :(得分:1)

您的第一个请求是GET请求 - 第二个请求是POST请求。请参阅此docs - 当提供参数data时,urlopen会执行POST请求。