NEWS
HttpGet liefert 403
-
@david-g sagte in HttpGet liefert 403:
Wenn ich die generierte URL im Browser aufrufe erhalte ich sofort die json.
https://nominatim.openstreetmap.org/reverse?lat=50.902266&lon=8.021895&format=jsonWahrscheinlich gibst Du keinen passenden User-Agent mit. Ist in den Policies gefordert:
https://operations.osmfoundation.org/policies/nominatim/
Der Test hat im selben Netz stattgefunden, glaube also nicht, dass meine IP geblockt wurde.
In Zeiten von IPv6 muss das nichts mehr heißen, da hat jedes Gerät eine eigene Adresse.
-
@david-g sagte in HttpGet liefert 403:
Wenn ich die gepostete URL am PC oder Smartphone öffne erscheint sofort die json.
siehe edit.
@david-g sagte in HttpGet liefert 403:
Die Adresse liegt mehre KM von meinem Wohnsitz entfernt.
hatte mir schon gedacht, dass das eine Testadresse war
dann bliebe nur noch, dass kein Useragent mitgegeben wird und die Anfrage als Bot erkannt und gesperrt wird.
-
@marc-berg sagte in HttpGet liefert 403:
In Zeiten von IPv6 muss das nichts mehr heißen, da hat jedes Gerät eine eigene Adresse.
Das stimmt natürlich, so weit habe ich nicht gedacht.
@marc-berg sagte in HttpGet liefert 403:
Wahrscheinlich gibst Du keinen passenden User-Agent mit. Ist in den Policies gefordert:
Das kann sein.
Dann wäre es aber noch recht frisch, dass dies geprüft wird.
Der Request-Baustein hat diesen auch nicht mitgegeben.Dann bleibt mir vermutlich nur die Option, das über eine JS Funktion zu lösen?
(Wo ich dann Unterstützung bräuchte^^)
Oder @haus-automatisierung baut die Option ein^^. Wobei das vermutlich nciht wirklich oft benötigt würde ......EDIT:
Hab mir jetzt mal Data ausgeben lassen vom httpget:script.js.Eigene_Scripte.GPS.Adresse_David: <html> <head> <title>Access blocked</title> </head> <body> <h1>Access blocked</h1> <p>You have been blocked because you have violated the <a href="https://operations.osmfoundation.org/policies/nominatim/">usage policy</a> of OSM's Nominatim geocoding service. Please be aware that OSM's resources are limited and shared between many users. The usage policy is there to ensure that the service remains usable for everybody.</p> <p>Please review the terms and make sure that your software adheres to the terms. You should in particular verify that you have set a <b>custom HTTP referrer or HTTP user agent</b> that identifies your application, and that you are not overusing the service with massive bulk requests.</p> <p>If you feel that this block is unjustified or remains after you have adopted your usage, you may contact the Nominatim system administrator at nominatim@openstreetmap.org to have this block lifted.</p> </body> </head>
-
@david-g sagte in HttpGet liefert 403:
that you have set a <b>custom HTTP referrer or HTTP user agent</b> that identifies your application, and that you are not overusing the service with massive bulk requests
passt also zu den Vermutungen
Bulk Geocoding
As a general rule, bulk geocoding of larger amounts of data is not encouraged. If you have regular geocoding tasks, please, look into alternatives below. Smaller one-time bulk tasks may be permissible, if these additional rules are followed
- limit your requests to a single thread
- limited to 1 machine only, no distributed scripts (including multiple Amazon EC2 instances or similar)
- Results must be cached on your side. Clients sending repeatedly the same query may be classified as faulty and blocked.
Unacceptable Use
The following uses are strictly forbidden and will get you banned:
- Auto-complete search This is not yet supported by Nominatim and you must not implement such a service on the client side using the API.
- Systematic queries This includes reverse queries in a grid, searching for complete lists of postcodes, towns etc. and downloading all POIs in an area. If you need complete sets of data, get it from the OSM planet or an extract.
- Scraping of details The details page is there for debugging only and may not be downloaded automatically.
-
@david-g ich hatte das selbe Problem und die Lösung. Da kommen mehrere Faktoren.
- Rate-Limit von 2500 pro Tag
- User-Agent: dieser sollte nicht zu "eindeutig" sein.
Habe mein Skript umgebaut und ein Random User-Agent eingebaut in Verbindung mit httpget. Und nun geht alles wieder.
Ro75.
-
@ro75 sagte in HttpGet liefert 403:
Rate-Limit von 2500 pro Tag
das wäre aber schon heftig, wenn das überschritten würde!
Das sind 1.7 Anfragen pro Minute rund um die Uhr -
Das hört sich ja gut an.
Die 2500 habe ich nicht. Bei 2 Adressen alle 5min komme ich auf 576.Dann wird es der Useragend sein.
Ich warte mal, ob @haus-automatisierung einen Vorschlag für eine Lösung mittels Blockly hat.Sonst wird es wohl eine JS Funktion werden müssen an die ich die Koordinaten übergebe.
Edit
Ich sehe grad, ich aktualisiere doch jede Minute den Standort. Trigger aber nur auf Veränderung.
Mal sehen, ob ich das minimiert bekomme. Zb Nur wenn die Änderung größer als x Meter ist. -
@homoran ja so ist es. Und wenn man weiter googelt kommt der User-Agent ins spiel.
Hier mal mein Code:
function GeoState(lat, lon, sDP='') { httpGet('https://nominatim.openstreetmap.org/reverse?format=geojson&lat='+lat+'&lon='+lon, { timeout: 15000,"headers":{"User-Agent":"'" + RUA() + "'"}}, (error, response) => { if (!error && response.statusCode == 200) { var info = JSON.parse(response.data); var dummy = JSON.stringify(info); dummy = JSON.parse(dummy).features[0].properties.address; setState(sDP, JSON.stringify(dummy), true); info = ''; dummy = ''; } else { console.error('Nominatim: '+response.statusCode); } }) } //Aufruf: GeoState (getState('owntracks.0.users.XXXXX.latitude').val, getState('owntracks.0.users.XXXXX.longitude').val, XXXXXZIEL_JSONDPXXXXX);
function UAChrome() { const Plattform = Math.floor(Math.random() * 2) const chromeVersion = Math.floor(Math.random() * 20) + 60; const webkitVersion = Math.floor(Math.random() * 700) + 500; const osPlatform = Plattform == 1 ? 'Win64; x64' : 'Macintosh; Intel Mac OS X 10_15_0'; const userAgent = `Mozilla/5.0 (${osPlatform}) AppleWebKit/${webkitVersion}.36 (KHTML, like Gecko) Chrome/${chromeVersion}.0.3163.100 Safari/${webkitVersion}.36`; return userAgent; } function UAFirefox() { const Plattform = Math.floor(Math.random() * 2) const firefoxVersion = Math.floor(Math.random() * 5) + 55; const geckoVersion = Math.floor(Math.random() * 30) + 20100101; const osPlatform = Plattform == 1 ? 'Win64; x64' : 'Macintosh; Intel Mac OS X 10_15_0'; const userAgent = `Mozilla/5.0 (${osPlatform}; rv: ${firefoxVersion}.0) Gecko/${geckoVersion} Firefox/${firefoxVersion}.0`; return userAgent; } function UASafari() { const Plattform = Math.floor(Math.random() * 2) const safariVersion = Math.floor(Math.random() * 5) + 10; const osPlatform = Plattform == 1 ? 'Win64; x64' : 'Macintosh; Intel Mac OS X 10_15_0'; const userAgent = `Mozilla/5.0 (${osPlatform}) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/${safariVersion}.1.15 Safari/605.1.15`; return userAgent; } function UAAndroid() { const androidVersion = Math.floor(Math.random() * 5) + 5; const chromeVersion = Math.floor(Math.random() * 20) + 60; const webkitVersion = Math.floor(Math.random() * 700) + 500; const osPlatform = `Linux; Android ${androidVersion}.${Math.floor(Math.random() * 10)}; en-us; Nexus 6 Build/LYZ28M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${chromeVersion}.0.3163.98 Mobile Safari/${webkitVersion}.36`; const userAgent = `Mozilla/5.0 (${osPlatform}`; return userAgent; } function UAIos() { const iosVersion = Math.floor(Math.random() * 5) + 9; const safariVersion = Math.floor(Math.random() * 5) + 600; const webkitVersion = Math.floor(Math.random() * 700) + 500; const osPlatform = `CPU iPhone OS ${iosVersion}_${Math.floor(Math.random() * 10)} like Mac OS X) AppleWebKit/${webkitVersion}.60 (KHTML, like Gecko) Version/${safariVersion}.0 Mobile/15E148 Safari/${webkitVersion}.60`; const userAgent = `Mozilla/5.0 (${osPlatform}`; return userAgent; } function RUA() { const UA = Math.floor(Math.random() * 4) var UserAgent = ''; if (UA == 0) { UserAgent = UAChrome(); } else if (UA == 1) { UserAgent = UAFirefox(); } else if (UA == 2) { UserAgent = UASafari(); } else if (UA == 3) { UserAgent = UAAndroid(); } else if (UA == 4) { UserAgent = UAIos(); } return UserAgent; }
In diesem Beispiel kommt immer ein neuer User-Agent ins spiel. Ich habe das bei mir noch geändert, dass aller 6 Stunden nur ein neuer Agent zum tragen kommt.
Ro75.
-
@david-g sagte in HttpGet liefert 403:
Ich warte mal, ob @haus-automatisierung einen Vorschlag für eine Lösung mittels Blockly hat.
Ich habe lange überlegt, ob ich eigene HTTP-Header auch im Blockly-Baustein erlaube. Aber nach den letzten Wochen hier, sind die meisten schon mit den einfachsten Bautein-Kombinationen überfordert. Selbst der neue http POST-Baustein überfordert schon die meisten...
Also ich möchte den erstmal nicht noch komplexer machen.
-
@david-g sagte in HttpGet liefert 403:
Der Test hat im selben Netz stattgefunden, glaube also nicht, dass meine IP geblockt wurde.
Die Beobachtung ist korrekt. Nominatim blockt nicht eine spezielle IP, sondern einen IP-Adressbereich in Verbindung mit dem User-Agent.
Daher läuft der Aufruf vom PC ohne Probleme und der Linux-Server mit ioBroker (httpget mit vermutlich immer dem gleichen User-Agent - sofern nichts übergeben) wird geblockt.
Ro75.
-
Weist du, ob man von selber freigegeben wird nach einer gewissen Zeit oder man es beantragen muss?
-
@david-g brauchst gar nichts machen. Einfach mal ne Stunde pausieren und zukünftig aber mit dem User-Agent in httpget arbeiten!
Ro75.
-
Bist du auch ein wenig fit in Blockly?
Kannst du mir sagen, wie deine beiden Scripte aussehen müssten, um die beiden Funktionen zu befüllen?
-
@david-g Blockly nicht mein Ding. Nur JS.
Ro75.
-
@david-g sagte in HttpGet liefert 403:
um die beiden Funktionen zu befüllen
Warum zwei Funktionen? Eine reicht doch?!
-
Darf auch gerne eine sein wo ich nur Koordinaten übergebe, hatte es nur so aufgeteilt da es von @Ro75 2 Teile waren.
-
@david-g der erste Teil war die eigentliche Abfrage von Nominatim. Der zweite Teil ist der zufällige User-Agent, der von der ersten mit aufgerufen wird. Nur bessere Übersicht.
Ro75.
-
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="r,(xv@.d$c;=YdJMPX80">lon</variable> <variable id="g{2,u1PfjN1:=CyqH3*m">lat</variable> <variable id="-@Osx@[T`D-%M3P0(~3!">sDP</variable> </variables> <block type="procedures_defcustomnoreturn" id="^(d~V_hm.^xis(f6DkUY" x="88" y="188"> <mutation statements="false"> <arg name="lon" varid="r,(xv@.d$c;=YdJMPX80"></arg> <arg name="lat" varid="g{2,u1PfjN1:=CyqH3*m"></arg> <arg name="sDP" varid="-@Osx@[T`D-%M3P0(~3!"></arg> </mutation> <field name="NAME">osmResolve</field> <field name="SCRIPT">ZnVuY3Rpb24gVUFDaHJvbWUoKSB7CiAgICBjb25zdCBQbGF0dGZvcm0gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyKQogICAgY29uc3QgY2hyb21lVmVyc2lvbiA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDIwKSArIDYwOwogICAgY29uc3Qgd2Via2l0VmVyc2lvbiA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDcwMCkgKyA1MDA7CiAgICBjb25zdCBvc1BsYXRmb3JtID0gUGxhdHRmb3JtID09IDEgPyAnV2luNjQ7IHg2NCcgOiAnTWFjaW50b3NoOyBJbnRlbCBNYWMgT1MgWCAxMF8xNV8wJzsKICAgIGNvbnN0IHVzZXJBZ2VudCA9IGBNb3ppbGxhLzUuMCAoJHtvc1BsYXRmb3JtfSkgQXBwbGVXZWJLaXQvJHt3ZWJraXRWZXJzaW9ufS4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8ke2Nocm9tZVZlcnNpb259LjAuMzE2My4xMDAgU2FmYXJpLyR7d2Via2l0VmVyc2lvbn0uMzZgOwogICAgcmV0dXJuIHVzZXJBZ2VudDsKfQogCmZ1bmN0aW9uIFVBRmlyZWZveCgpIHsKICAgIGNvbnN0IFBsYXR0Zm9ybSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDIpCiAgICBjb25zdCBmaXJlZm94VmVyc2lvbiA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDUpICsgNTU7CiAgICBjb25zdCBnZWNrb1ZlcnNpb24gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAzMCkgKyAyMDEwMDEwMTsKICAgIGNvbnN0IG9zUGxhdGZvcm0gPSBQbGF0dGZvcm0gPT0gMSA/ICdXaW42NDsgeDY0JyA6ICdNYWNpbnRvc2g7IEludGVsIE1hYyBPUyBYIDEwXzE1XzAnOwogICAgY29uc3QgdXNlckFnZW50ID0gYE1vemlsbGEvNS4wICgke29zUGxhdGZvcm19OyBydjogJHtmaXJlZm94VmVyc2lvbn0uMCkgR2Vja28vJHtnZWNrb1ZlcnNpb259IEZpcmVmb3gvJHtmaXJlZm94VmVyc2lvbn0uMGA7CiAgICByZXR1cm4gdXNlckFnZW50Owp9CiAKZnVuY3Rpb24gVUFTYWZhcmkoKSB7CiAgICBjb25zdCBQbGF0dGZvcm0gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyKQogICAgY29uc3Qgc2FmYXJpVmVyc2lvbiA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDUpICsgMTA7CiAgICBjb25zdCBvc1BsYXRmb3JtID0gUGxhdHRmb3JtID09IDEgPyAnV2luNjQ7IHg2NCcgOiAnTWFjaW50b3NoOyBJbnRlbCBNYWMgT1MgWCAxMF8xNV8wJzsKICAgIGNvbnN0IHVzZXJBZ2VudCA9IGBNb3ppbGxhLzUuMCAoJHtvc1BsYXRmb3JtfSkgQXBwbGVXZWJLaXQvNjA1LjEuMTUgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLyR7c2FmYXJpVmVyc2lvbn0uMS4xNSBTYWZhcmkvNjA1LjEuMTVgOwogICAgcmV0dXJuIHVzZXJBZ2VudDsKICB9CiAKZnVuY3Rpb24gVUFBbmRyb2lkKCkgewogICAgY29uc3QgYW5kcm9pZFZlcnNpb24gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA1KSArIDU7CiAgICBjb25zdCBjaHJvbWVWZXJzaW9uID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMjApICsgNjA7CiAgICBjb25zdCB3ZWJraXRWZXJzaW9uID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNzAwKSArIDUwMDsKICAgIGNvbnN0IG9zUGxhdGZvcm0gPSBgTGludXg7IEFuZHJvaWQgJHthbmRyb2lkVmVyc2lvbn0uJHtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMCl9OyBlbi11czsgTmV4dXMgNiBCdWlsZC9MWVoyOE0pIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8ke2Nocm9tZVZlcnNpb259LjAuMzE2My45OCBNb2JpbGUgU2FmYXJpLyR7d2Via2l0VmVyc2lvbn0uMzZgOwogICAgY29uc3QgdXNlckFnZW50ID0gYE1vemlsbGEvNS4wICgke29zUGxhdGZvcm19YDsKICAgIHJldHVybiB1c2VyQWdlbnQ7Cn0KIApmdW5jdGlvbiBVQUlvcygpIHsKICAgIGNvbnN0IGlvc1ZlcnNpb24gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA1KSArIDk7CiAgICBjb25zdCBzYWZhcmlWZXJzaW9uID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNSkgKyA2MDA7CiAgICBjb25zdCB3ZWJraXRWZXJzaW9uID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNzAwKSArIDUwMDsKICAgIGNvbnN0IG9zUGxhdGZvcm0gPSBgQ1BVIGlQaG9uZSBPUyAke2lvc1ZlcnNpb259XyR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTApfSBsaWtlIE1hYyBPUyBYKSBBcHBsZVdlYktpdC8ke3dlYmtpdFZlcnNpb259LjYwIChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi8ke3NhZmFyaVZlcnNpb259LjAgTW9iaWxlLzE1RTE0OCBTYWZhcmkvJHt3ZWJraXRWZXJzaW9ufS42MGA7CiAgICBjb25zdCB1c2VyQWdlbnQgPSBgTW96aWxsYS81LjAgKCR7b3NQbGF0Zm9ybX1gOwogICAgcmV0dXJuIHVzZXJBZ2VudDsKfQogCmZ1bmN0aW9uIFJVQSgpIHsKICAgIGNvbnN0IFVBID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNCk7CiAKICAgIGlmIChVQSA9PSAwKSB7CiAgICAgICAgcmV0dXJuIFVBQ2hyb21lKCk7CiAgICB9IGVsc2UgaWYgKFVBID09IDEpIHsKICAgICAgICByZXR1cm4gVUFGaXJlZm94KCk7CiAgICB9IGVsc2UgaWYgKFVBID09IDIpIHsKICAgICAgICByZXR1cm4gVUFTYWZhcmkoKTsKICAgIH0gZWxzZSBpZiAoVUEgPT0gMykgewogICAgICAgIHJldHVybiBVQUFuZHJvaWQoKTsKICAgIH0gZWxzZSBpZiAoVUEgPT0gNCkgewogICAgICAgIHJldHVybiBVQUlvcygpOwogICAgfQoKICAgIHJldHVybiAnJzsKfQoKaHR0cEdldCgKICAgIGBodHRwczovL25vbWluYXRpbS5vcGVuc3RyZWV0bWFwLm9yZy9yZXZlcnNlP2Zvcm1hdD1nZW9qc29uJmxhdD0ke2xhdH0mbG9uPSR7bG9ufWAsCiAgICB7CiAgICAgICAgdGltZW91dDogMTUwMDAsCiAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAnVXNlci1BZ2VudCc6IFJVQSgpLAogICAgICAgIH0sCiAgICB9LAogICAgKGVyciwgcmVzcG9uc2UpID0+IHsKICAgICAgICBpZiAoIWVyciAgJiYgcmVzcG9uc2Uuc3RhdHVzQ29kZSA9PSAyMDApIHsKICAgICAgICAgICAgY29uc3QgaW5mbyA9IEpTT04ucGFyc2UocmVzcG9uc2UuZGF0YSk7CiAgICAgICAgICAgIGNvbnN0IGFkZHJlc3MgPSBpbmZvLmZlYXR1cmVzWzBdLnByb3BlcnRpZXMuYWRkcmVzczsKCiAgICAgICAgICAgIHNldFN0YXRlKHNEUCwgSlNPTi5zdHJpbmdpZnkoYWRkcmVzcyksIHRydWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYE5vbWluYXRpbTogJHtyZXNwb25zZS5zdGF0dXNDb2RlfWApOwogICAgICAgIH0KICAgIH0KKTsK</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> </xml>
-
Vielen Dank.
sDP ist ein DP wo die json reingeschrieben wird? -