2010-12-12 41 views
1

Je suis tryint pour consommer une réponse JSON mais j'ai un comportement très étrange. Le point de fin est une application Java s'exécutant sur Tomcat. Je veux charger l'adresse suivanteComportement inattendu avec Python urllib

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

En utilisant Ruby open-uri je charge le JSON. Si je tape dans le navigateur, je reçois toujours la réponse. Une fois que j'essaie d'utiliser urllib de Python ou urllib2 je reçois une erreur

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

Il est tout à fait étrange et je suppose que l'erreur se trouve dans le serveur API. Des indices?

+0

Astuce: Si cela avait quelque chose à voir avec urllib, vous verriez une exception urllib ... –

+0

Afficher le code, s'il vous plaît. – jonesy

+0

Quand je tire les données à partir d'un navigateur, j'obtiens json, mais lorsque j'utilise la ligne de commande curl, j'obtiens XML. Suggère que quelque chose d'étrange se passe sur le serveur. –

Répondre

5

Le serveur semble avoir besoin d'un en-tête « 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 
0

Deux possibilités, dont aucun ne retiennent l'eau:

  • Le serveur est seulement prêt à utiliser le protocole HTTP 1.1 (qui urllib apparemment ne supporte pas, mais urllib2 ne)
  • qu'il fait agent utilisateur renifler, et le rejet de Python (j'essayé d'utiliser la chaîne UA de Firefox à la place, mais il m'a donné encore une erreur)
+0

J'ai essayé urllib2 aussi. Il semble que SimonJ a eu raison! Thanx – PanosJee