Python urllib的意外行为

时间:2010-12-12 23:55:23

标签: python json api servlets

我尝试使用JSON响应,但我有一个非常奇怪的行为。终点是在Tomcat上运行的Java应用程序。 我想加载以下网址

http://opendata.diavgeia.gov.gr/api/decisions?count=50&output=json_full&from=1

使用Ruby open-uri我加载了json。如果我在浏览器中点击,我仍然会收到回复。一旦我尝试使用Python的urllib或urllib2,我就会收到错误

javax.servlet.ServletException: Could not resolve view with name 'jsonView' in servlet with name 'diavgeia-api'

这很奇怪,我猜错误在于API服务器。任何提示?

2 个答案:

答案 0 :(得分:5)

服务器似乎需要一个'Accept'标题:

>>> print urllib2.urlopen(
...   urllib2.Request(
...     "http://opendata.diavgeia.gov.gr/api/decisions?count=50&output=json_full&from=1",
...     headers={"accept": "*/*"})).read()[:200]
{"model":{"queryInfo":{"total":117458,"count":50,"order":"desc","from":1},"expandedDecisions":[{"metadata":{"date":1291932000000,"tags":{"tag":[]},"decisionType":{"uid":27,"label":"ΔΑΠΑΝΗ","extr

答案 1 :(得分:0)

两种可能性,都没有水:

  • 服务器只准备使用HTTP 1.1(urllib显然不支持,但urllib2支持)
  • 正在进行用户代理嗅探,拒绝Python(我尝试使用Firefox的UA字符串,但它仍然给我一个错误)