2010-12-12 27 views
1

Ich versuche eine JSON-Antwort zu konsumieren, aber ich habe ein sehr seltsames Verhalten. Der Endpunkt ist eine Java App, die auf Tomcat läuft. Ich möchte die folgende URLUnerwartetes Verhalten mit Python urllib

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

mit Ruby open-uri ich die json laden laden. Wenn ich im Browser eintrage, bekomme ich immer noch die Antwort. Wenn ich versuche, Python ‚s urllib oder urllib2 zu verwenden, erhalte ich einen Fehler

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

Es s ein ziemlich seltsam und ich denke, der Fehler in dem API-Server liegt. Irgendwelche Hinweise?

+0

Hinweis: Wenn es etwas mit Urllib zu tun hatte, würden Sie eine Urllib-Ausnahme sehen ... –

+0

Zeigen Sie bitte den Code. – jonesy

+0

Wenn ich die Daten von einem Browser herunterziehe, bekomme ich JSON, aber wenn ich die Befehlszeilencurl benutze, bekomme ich XML. Schlägt vor, dass auf dem Server etwas Ungewöhnliches passiert. –

Antwort

5

Der Server zu benötigen scheint ein ‚Übernehmen‘ Header:

>>> 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

zwei Möglichkeiten, von denen keiner stichhaltig:

  • Der Server nur bereit ist, HTTP 1.1 zu verwenden (die offenbar urllib nicht unterstützt, aber urllib2 tun)
  • Es Sniffing User-Agenten zu tun, und Python Ablehnung (ich habe versucht, Firefox UA String anstelle, aber es gab mir noch einen Fehler)
+0

Ich habe auch urllib2 versucht. Es scheint, SimonJ hat es richtig gemacht! Danke – PanosJee