Я пытаюсь использовать API-интерфейс сокращения URL-адресов Google с помощью PHP:
$apiKey = 'ABC'; $url = 'http://www.stackoverflow.com/'; $postData = array('longUrl' => $url); $jsonData = json_encode($postData); $curlObj = curl_init(); curl_setopt($curlObj, CURLOPT_URL, 'https://www.googleapis.com/urlshortener/v1/url?key=' . $apiKey); curl_setopt($curlObj, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curlObj, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($curlObj, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($curlObj, CURLOPT_HEADER, 0); curl_setopt($curlObj, CURLOPT_HTTPHEADER, array("Content-Type: application/json; charset=utf-8","Accept:application/json, text/javascript, */*; q=0.01")); curl_setopt($curlObj, CURLOPT_POST, 1); curl_setopt($curlObj, CURLOPT_POSTFIELDS, $jsonData); $result = curl_exec($curlObj);
Но я получаю следующее сообщение об ошибке:
{ "error": { "errors": [{ "domain": "usageLimits", "reason": "ipRefererBlocked", "message": "There is a per-IP or per-Referer restriction configured on your API key and the request does not match these restrictions. Please use the Google Developers Console to update your API key configuration if request from this IP or referer should be allowed.", "extendedHelp": "https://console.developers.google.com" }], "code": 403, "message": "There is a per-IP or per-Referer restriction configured on your API key and the request does not match these restrictions. Please use the Google Developers Console to update your API key configuration if request from this IP or referer should be allowed." }
Я проверил следующее:
Сценарий запускается всякий раз, когда пользователь посещает страницу.
Я очень ценю любой совет, который помогает мне пройти эту неприятную проблему. Кажется, я не нашел никакого решения «там».
Это проблема с настройками приложений в Google Developers Console . На экране учетных данных перечислены IP-адреса, которым разрешено использовать ключ API. Это предохранение от безопасности, чтобы помочь защитить ключ, если он протекает.
Вам необходимо изменить разрешенные IP-адреса либо пустым (менее безопасным), либо обновить его, чтобы включить фактический IP-адрес вашего сервера.
Я просто добавлю к этому, что у меня была аналогичная проблема при использовании Google API с облачного сервера Rackspace. Если добавлены ЛЮБЫЕ IP-адреса, он всегда будет заблокирован (проверен несколько раз, чтобы убедиться, что это правильный IP-адрес, включая запросы от сервера на страницу, сообщающую о удаленном IP-адресе). Поэтому из облачных узлов Rackspace я должен разрешить любой IP-адрес. Если я хожу где-нибудь еще, тогда ограничения IP работают так, как они были разработаны.