【问题标题】:Google URL-Shortener API with API-Key returns "403 - Daily Limit for Unauthenticated Use Exceeded." using PHP & CURL带有 API-Key 的 Google URL-Shortener API 返回“403 - 已超出未经验证使用的每日限制”。使用 PHP 和 CURL
【发布时间】:2015-08-05 04:00:19
【问题描述】:

我创建了一个相当简单的脚本,它会为我生成一个随机且唯一的密码来重置用户的密码。因为我讨厌通过电子邮件以纯文本形式发送密码,所以我的脚本将密码转换为存储在我服务器上的图像。该脚本返回密码、密码图像,并且应该使用 Google URL-Shortener API 缩短密码图像的 URL。

由于这仅在我们的办公室中使用并且页面的 URL 不公开,因此我选择使用 API-Key 而不是 OAuth 2.0。

它运行良好,然后突然停止提供缩短的 URL。我添加了一些错误处理代码,因此它会显示错误并开始返回此错误:

403 - 已超出未经验证使用的每日限制。继续使用 需要注册。

这是我用来获取缩短 URL 的函数:

function shortURL($ImgID)
{
    // This is the URL to shorten
    $ImgURL = 'http://www.mywebsite.com/temp/'.$ImgID.'.jpg';

    // Get API key from : http://code.google.com/apis/console/
    $apiKey = 'MY_API_KEY'; //browser key

    $postData = array('longUrl' => $ImgURL, 'key' => $apiKey);

    $jsonData = json_encode($postData);

    $curlObj = curl_init();

    curl_setopt($curlObj, CURLOPT_URL, 'https://www.googleapis.com/urlshortener/v1/url');
    curl_setopt($curlObj, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curlObj, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($curlObj, CURLOPT_HEADER, 0);
    curl_setopt($curlObj, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
    curl_setopt($curlObj, CURLOPT_POST, 1);
    curl_setopt($curlObj, CURLOPT_POSTFIELDS, $jsonData);

    $response = curl_exec($curlObj);

    // Change the response json string to object
    $json = json_decode($response);

    // Change the response json string to an array
    $shortLink = get_object_vars($json);

    curl_close($curlObj);

    // Error handling
    $short = objectToArray($json);
    $code = $short['error']['code'];
    $message = $short['error']['message'];

    return ($shortLink['id']?$shortLink['id']:$code.' - '.$message);

}

就像我说的,它工作正常,然后有一天停止了。我已经更改了 API 密钥,但没有成功。我查看了开发人员控制台中的配额,但无论是整体还是基于每个用户,我都远未达到建议的限制。

我转向这里是因为我的 Google-Fu 让我失望了,而且我无法找到任何解释来解释发生了什么变化以及为什么我以前工作的脚本停止了。

【问题讨论】:

    标签: curl google-api-php-client api-key google-url-shortener


    【解决方案1】:

    在这篇帖子Goo.gl URL Shortener Stopped Working (php/curl)中查看答案

    您需要将 API 密钥添加到请求中

     $apikey = "YOURAPIKEY";
     curl_setopt($curlObj, CURLOPT_URL, 'https://www.googleapis.com/urlshortener/v1/url?key='.$apikey);
    

    【讨论】:

      【解决方案2】:

      一个有趣的发展....我做了一个小改动:

      我将 $postData 数组更改为仅包含 longURL 并将 API 密钥添加到 CURLOPT_URL 并在刷新原始页面以提取新代码后,它起作用了。

      当我转到 goo.gl 并使用“激活”API 密钥的用户登录时,它不会显示我最近创建的密钥。

      因此,虽然最初的问题似乎得到了解答(我现在已经解决了),但我还有两个问题:

      1. 为什么有效?
      2. 为什么它没有向我展示创建的历史 缩短的网址?

      【讨论】:

      • 好奇者和更好奇的人。当我昨天发布上面的答案时,我忽略了这样一个事实,即在对 $postData 进行更改并将 $apiKey 添加到我的 curl URL 之后,我收到了一条新的错误消息:“403 - There is a per-IP or per-在您的 API 密钥上配置了引荐来源网址限制,并且请求与这些限制不匹配。如果应允许来自此 IP 或引荐来源网址的请求,请使用 Google Developers Console 更新您的 API 密钥配置。” (在下一条评论中继续)
      • (接上一条评论) 收到消息后,我回到开发者控制台,从浏览器键中删除了引用网站,然后再次尝试。它仍然给了我新的错误。所以我进去并生成了一个 API 服务器密钥,并列出了我认为是我们服务器的 IP。它仍然产生了这个新错误。因此,我从列表中删除了 Web 服务器的 IP 并再次尝试。这次它没有给我错误。 (在下一条评论中继续)
      • (接上一条评论)所以我再次返回并将其更改回 API 浏览器密钥,并以我们的网站作为引荐来源网址,这样我就可以在此处分享错误消息作为更新和该错误没有再次重现。我认为这是一个奇怪的时间问题,再次删除了引用网站,一切仍然有效(生成了我的随机密码和图像,谷歌短 URL 显示没有错误)。就在那时我发布了我自己问题的“答案”。今天早上,新的错误又回来了,它仍然没有在帐户历史记录中显示缩短的 URL。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-13
      • 1970-01-01
      相关资源
      最近更新 更多