Wenn man den API-Key in der Google-Search-Console einschränkt, muss ein Referer gesetzt sein:
Über die file_get_contents wird standardmäßig kein Referer gesetzt, d.h. hier wird die API-Abfrage blockiert:
Z. 153: https://github.com/delahaye/dlh_geocode/blob/master/classes/GeoCode.php#L153
$arrGeo = json_decode(file_get_contents($strURL), true);
{
"error_message" : "API keys with referer restrictions cannot be used with this API.",
"results" : [],
"status" : "REQUEST_DENIED"
}
Stattdessen müsste hier ein Referer übergeben werden. Das ist mit file_get_contents zwar möglich, aber nicht wirklich gut machbar:
$opts = array(
'http'=>array(
'header'=>"Referer: MEINEDOMAIN\r\n"
)
);
$context = stream_context_create($opts);
$arrGeo = json_decode(file_get_contents($strURL), true,$context);
Nun gut, falls dieser Aufruf nicht erfolgreich ist, wird ja im Anschluss über curl probiert (geoCodeCurl).
Aber auch hier wird kein Referer gesetzt.
https://stackoverflow.com/questions/51146680/google-api-key-http-referrers-issue-using-curl-php
https://github.com/delahaye/dlh_geocode/blob/master/classes/GeoCode.php#L193
if (curl_setopt($curl, CURLOPT_URL, $strGeoURL) && curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1) && curl_setopt($curl, CURLOPT_HEADER, 0))
Leider gibt es hier gerade ein unlösbares Problem:
Wenn Google-Map-API-Keys mit HTTP-Verweis-URLs verwendet werden, kann die Geolocation-API nicht angesteuert werden (da dies immer serverseitig funktioniert, ein Referer wird von Google einfach ignoriert.
Wenn Google-Map-API-Keys mit IP-Filter verwendet werden, kann zwar die Geolocation-API verwendet werden, aber die Static Maps im Backend können dann nicht mehr angezeigt werden, da die Client-IP (Browser) unterschiedlich von der Server-IP ist.
Der API-Key in den Contao-Einstellungen wird also für zwei unterschiedliche Funktionsweisen (Geolocation und Map-Anzeige) verwendet. Sobald man nach IP oder HTTP-Verweis-URL filtert (und das sollte man unbedingt tun, jetzt wo die Google Maps potentiell Geld kosten) kann man nur das eine oder das andere mit dem API-Key machen.
Wenn man den API-Key in der Google-Search-Console einschränkt, muss ein Referer gesetzt sein:
Über die file_get_contents wird standardmäßig kein Referer gesetzt, d.h. hier wird die API-Abfrage blockiert:
Z. 153: https://github.com/delahaye/dlh_geocode/blob/master/classes/GeoCode.php#L153
$arrGeo = json_decode(file_get_contents($strURL), true);Stattdessen müsste hier ein Referer übergeben werden. Das ist mit file_get_contents zwar möglich, aber nicht wirklich gut machbar:
Nun gut, falls dieser Aufruf nicht erfolgreich ist, wird ja im Anschluss über curl probiert (geoCodeCurl).
Aber auch hier wird kein Referer gesetzt.
https://stackoverflow.com/questions/51146680/google-api-key-http-referrers-issue-using-curl-php
https://github.com/delahaye/dlh_geocode/blob/master/classes/GeoCode.php#L193
if (curl_setopt($curl, CURLOPT_URL, $strGeoURL) && curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1) && curl_setopt($curl, CURLOPT_HEADER, 0))Leider gibt es hier gerade ein unlösbares Problem:
Wenn Google-Map-API-Keys mit HTTP-Verweis-URLs verwendet werden, kann die Geolocation-API nicht angesteuert werden (da dies immer serverseitig funktioniert, ein Referer wird von Google einfach ignoriert.
Wenn Google-Map-API-Keys mit IP-Filter verwendet werden, kann zwar die Geolocation-API verwendet werden, aber die Static Maps im Backend können dann nicht mehr angezeigt werden, da die Client-IP (Browser) unterschiedlich von der Server-IP ist.
Der API-Key in den Contao-Einstellungen wird also für zwei unterschiedliche Funktionsweisen (Geolocation und Map-Anzeige) verwendet. Sobald man nach IP oder HTTP-Verweis-URL filtert (und das sollte man unbedingt tun, jetzt wo die Google Maps potentiell Geld kosten) kann man nur das eine oder das andere mit dem API-Key machen.