【发布时间】:2015-04-12 16:31:48
【问题描述】:
我目前正在尝试修复一个名为 NetfliXBMC 的 Kodi 插件。
它使用这个 url 来获取特定电影的信息:
http://www.netflix.com/JSON/BOB?movieid=<SOMEID>
在尝试构建一个最小案例来提出这个问题时,我发现甚至不需要登录即可访问信息,这大大简化了我的问题。
通过 wget、curl、incognito chrome 等查询有关电影的信息。它永远不会在 urllib2 中工作:
# wget works just fine
$: wget -q -O- http://www.netflix.com/JSON/BOB?movieid=80021955
{"contextData":"{\"cookieDisclosure\":{\"data\":{\"showCookieBanner\":false}}}","result":"success","actionErrors":null,"fieldErrors":null,"actionMessages":null,"data":[output omitted for brevity]}
# so does curl
$: curl http://www.netflix.com/JSON/BOB?movieid=80021955
{"contextData":"{\"cookieDisclosure\":{\"data\":{\"showCookieBanner\":false}}}","result":"success","actionErrors":null,"fieldErrors":null,"actionMessages":null,"data":[output omitted for brevity}
# but python's urllib always gets a 500
$: python -c "import urllib2; urllib2.urlopen('http://www.netflix.com/JSON/BOB?movieid=80021955').read()"
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/python2.7/urllib2.py", line 127, in urlopen
return _opener.open(url, data, timeout)
File "/usr/lib/python2.7/urllib2.py", line 410, in open
response = meth(req, response)
File "/usr/lib/python2.7/urllib2.py", line 523, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib/python2.7/urllib2.py", line 448, in error
return self._call_chain(*args)
File "/usr/lib/python2.7/urllib2.py", line 382, in _call_chain
result = func(*args)
File "/usr/lib/python2.7/urllib2.py", line 531, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 500: Internal Server Error
$: python --version
Python 2.7.6
到目前为止我已经尝试过:几个不同的用户代理字符串,使用 cookie jar 初始化 urlopener,普通的旧 urllib(不会引发异常,但会收到相同的错误页面)。
我真的很好奇为什么会这样。提前致谢!
【问题讨论】:
-
很好奇,它与 requests 库配合得很好
-
好奇者和好奇者,它也适用于古老的
urllib!-) 让你想拍一个 tcp 跟踪器,看看 urllib2 究竟是如何设法解决 netflix 错误的(500 == 服务器-side bug),而其他任何一个都没有。但我只是在任何 netflix 用作问题跟踪器的地方提交一个错误,然后让他们调试 他们的问题:-)。 -
@alex 似乎 netflix 正在停用它的 API,我怀疑他们是否愿意为此提供帮助。对我来说,它不适用于普通的
urllib -
它不适用于手动 http over
telnet或者:s。我会用它做更多的测试,并用我发现的任何东西更新问题。 -
@gnp,我已经指定了“带有 python 2.7 的 urllib”(在带有 Python 3.any 的
urllib中没有urlopen)。无论如何,是的,如果该 API 被弃用,他们肯定不会花费周期来调试其错误的实现——tcp 跟踪以找出每种情况下发生的确切情况是一种方法。
标签: python json urllib2 netflix