Неожиданное поведение с Python urllib - PullRequest
1 голос
/ 13 декабря 2010

Я пытаюсь получить ответ JSON, но у меня есть одно очень странное поведение. Конечной точкой является приложение Java, работающее на Tomcat. Я хочу загрузить следующий URL

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

Используя Ruby open-uri, я загружаю json. Если я нажму в браузере, я все равно получу ответ. Когда я пытаюсь использовать urllib или urllib2 в Python, я получаю сообщение об ошибке

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

Это довольно странно, и я предполагаю, что ошибка заключается в сервере API. Есть намеки?

Ответы [ 2 ]

5 голосов
/ 13 декабря 2010

Для сервера требуется заголовок «Принять»:

>>> 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
0 голосов
/ 13 декабря 2010

Две возможности, ни одна из которых не содержит воды:

  • Сервер готов использовать только HTTP 1.1 (который, по-видимому, не поддерживает urllib, но urllib2 поддерживает)
  • Он выполняет анализ пользовательского агента и отклоняет Python (вместо этого я попытался использовать строку UA в Firefox, но она все равно выдала мне ошибку)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...