AsHttp Get JSON-Data

Hallo,
ich versuche JSON-Daten von nominatim.openstreetmap.org zu bekommen.
Mein Versuch:

Variablen:

VAR
  Client : httpsClient;
  Responsedata : STRING[1024];
END_VAR
PROGRAM _INIT
	Client.method 			:= httpMETHOD_GET;
	Client.option 			:= httpOPTION_HTTP_11;
	
	Client.pHost 			:= ADR('nominatim.openstreetmap.org');
	Client.pUri 			:= ADR('/search?q=Schanzenstrasse%2090,8500%20Hamburg&format=json&limit=1');
//	Client.pRequestData		:= ADR('/search?q=Schanzenstrasse%2090,8500%20Hamburg&format=json&limit=1');

    //Client.hostPort         := 443;
	Client.pResponseData 	:= ADR(Responsedata);
	Client.responseDataSize := SIZEOF(Responsedata);
	
END_PROGRAM


PROGRAM _CYCLIC
	Client(enable := TRUE, send := TRUE); (* Call httpClient() *)
	
END_PROGRAM

PROGRAM _EXIT
	(* Release Client instance *)
	Client(enable := 0, send := 0);
END_PROGRAM

Das Ergebnis sollte so aussehen:

[
  {
    "place_id": 131168262,
    "licence": "Data © OpenStreetMap contributors, ODbL 1.0. http://osm.org/copyright",
    "osm_type": "way",
    "osm_id": 919748505,
    "lat": "53.5642677",
    "lon": "9.9655483",
    "class": "highway",
    "type": "tertiary",
    "place_rank": 26,
    "importance": 0.0534158869306477,
    "addresstype": "road",
    "name": "Schanzenstraße",
    "display_name": "Schanzenstraße, Sternschanze, Altona, Hamburg, 20357, Deutschland",
    "boundingbox": [
      "53.5641072",
      "53.5644280",
      "9.9655052",
      "9.9655919"
    ]
  }
]

Aber ich bekomme nur ein 403: Access blocked

Hallo,

ich denke mal es scheitert daran:

Provide a valid HTTP Referer or User-Agent identifying the application (stock User-Agents as set by http libraries will not do). - Quelle

Das dürfte dann mittels pRequestHeader vom typ httpRequestHeader_t und da mittels userLine, wo genau das als Beispiel sogar dann praktischerweise dabei steht: B&R Online Help

Hoffe, das hilft

P.S.: Results must be cached on your side. Clients sending repeatedly the same query may be classified as faulty and blocked. - nur, damit du nicht als nächstes darüber stolperst :slight_smile:

1 Like

Hi,

@michael_w, ich hatte es nebenher rein interessehalber auch gecheckt: du liegst komplett richtig!

Wenn kein User-Agent im HTTP Header gesetzt ist, lehnt die API den Request ab:

Wenn man den Request Header dann über die httpRequestHeader_t Struktur bedient, kann der Request durchgeführt werden:

Grüße!

Vielen Dank, das war es dann auch. Funktioniert.
Also wer lesen kann ist da ganz klar im Vorteil :slight_smile:

Schönes Wochenende Euch :grinning_face:

1 Like