我有一个令人沮丧的问题与谷歌云翻译API。
我正确地设置了对某些域的密钥限制,包括 *. example.com/ *(末尾没有空格)
我在URL https://www.example.com/translate上启动脚本,并显示以下消息:
"status": "PERMISSION_DENIED",
"details": [
{
"@type": "type.googleapis.com/google.rpc.ErrorInfo",
"reason": "API_KEY_HTTP_REFERRER_BLOCKED",
"domain": "googleapis.com",
字符串
当我删除限制时,一切正常,但我需要限制来避免误用/滥用。
此外,我使用这个相同的API密钥为其他谷歌应用程序API(Map,身份验证等),它的工作完美地从这个领域.
太奇怪了
你有任何想法或任何方法来更好地调查这个问题吗?我怎么能知道谷歌看到的推荐人?(或任何外部服务)
非常感谢!!
编辑:
PHP代码:
require_once(APPPATH . "libraries/GoogleTranslate/vendor/autoload.php");
require_once(APPPATH . "libraries/GoogleTranslate/vendor/google/cloud-translate/src/V2/TranslateClient.php");
$translate = new TranslateClient([
'key' => 'xXXXx'
]);
// Translate text from english to french.
$result = $translate->translate('Hello world!', [
'target' => 'fr'
]);
echo $result['text'];
型
完整的错误消息:
Type: Google\Cloud\Core\Exception\ServiceException
Message: {
"error": { "code": 403, "message": "Requests from referer
\u003cempty\u003e are blocked.",
"errors": [ { "message": "Requests from referer \u003cempty\u003e are blocked.", "domain": "global", "reason": "forbidden" } ],
"status": "PERMISSION_DENIED",
"details": [ { "@type": "type.googleapis.com/google.rpc.ErrorInfo",
"reason": "API_KEY_HTTP_REFERRER_BLOCKED",
"domain": "googleapis.com",
"metadata": { "service": "translate.googleapis.com", "consumer": "projects/XXXXX" } } ] } }
Filename: htdocs/application/libraries/GoogleTranslate/vendor/google/cloud-core/src/RequestWrapper.php
Line Number: 368
型
4条答案
按热度按时间ckx4rj1h1#
我将在这里留下我在公共问题跟踪器上讨论的见解。
HTTP限制按预期工作,但
referer
始终为空,因为默认情况下没有设置。但是,它可以手动添加,所以不要这样做:字符串
您需要指定代理人:
型
您必须考虑到这种类型的请求可以从任何计算机发送(如果你有密钥)因为你没有限制请求的域,只检查谁是请求者。(您可以手动设置)。此外,在Web浏览器上运行的API客户端会公开其API密钥;这就是为什么我建议你使用service accounts。更多信息:添加应用程序限制。
关于HTTP referer,这基本上是一个头字段,基本上,Web浏览器将其放在让网页知道用户来自哪里。例如,如果您单击上面的链接(HTTP referer),则
referer
字段将是this页面。总之,由于您可以将任何
referer
放在请求的头部中,这与没有任何类型的限制非常相似。实际上,建议使用service accounts。为了轻松解决这个问题,请手动将referer
添加到头部中,如上面的代码所示。voase2hg2#
我看了评论,你似乎做得很好。我建议你试试:
soat7uwm3#
我有同样的问题与谷歌翻译,但不是与Map。所以Map工程与翻译限制,但翻译不。
我发现的唯一解决方案,在有效的限制,是设置一个IP限制,而不是HTTP代理(网站)。
k4ymrczo4#
对我来说,上面的例子给了我一些见解,我能够修改我的代码,使其工作。我添加了我的代码片段,以及我如何为HTTP请求添加自定义头。我希望这给其他人一些线索或解决他们的问题。
字符串