首页 > 解决方案 > google vision API HTTP Forbidden 错误的原因?红宝石(导轨)

问题描述

我一直在尝试让 google vision API 在我的 rails 应用程序中工作,但不断收到Net::HTTPForbidden响应。我不太确定是什么原因造成的,因为我所拥有的一切似乎都已正确设置,我尝试生成新密钥但仍然遇到相同的错误,任何帮助将不胜感激。出于明显的原因,我在这篇文章中用“XXXXX_MY_API_KEY_XXXXX”替换了我的 API 密钥,所以这不是问题,也尝试直接粘贴到图像 url 中代替“img_url”,所以我认为这与这个问题。

 require 'net/http'
  require 'uri'
  require 'json'

def transcribe(img_url)

    uri = URI.parse('https://vision.googleapis.com/v1/images:annotate?key=' + 'XXXXX_MY_API_KEY_XXXXX')
    request = Net::HTTP::Post.new(uri)
    request.content_type = 'application/json'
    request.body = JSON.dump(
      'requests' => [
        {
          'image' => {
            'source' => {
              'imageUri' => img_url
            }
          },
          'features' => [
            {
              'type' => 'TEXT_DETECTION',
              'maxResults' => 1,
              'model' => 'builtin/latest'
            }
          ]
        }
      ]
    )

    req_options = {
      use_ssl: uri.scheme == 'https'
    }

    response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
      http.request(request)
    end

    p response

    p response.code
    p response.body 
end

标签: ruby-on-railsrubygoogle-cloud-platformgoogle-vision

解决方案


好的,经过几个小时的折腾,我终于找到了问题所在。当您第一次尝试使用 api 时,他们会返回一个链接给您,您必须访问该链接才能激活特定的 API(在我的情况下是视觉),我无法通过谷歌云控制面板上的 ui 找到此页面,只能通过链接。即使 API 密钥是活动的并且不受计费设置的限制,它也不会在不激活特定 API 的情况下运行。因为我已经注释掉了响应代码/正文,所以我只获得了我的 API 调用的状态代码并且没有看到响应的其余部分,从而阻止了我找到正确的激活链接。

这对我来说是一个巨大的判断失误,希望这将有助于遇到类似问题或希望将谷歌视觉 API 集成到 rails 应用程序并偶然发现这个线程的任何人,上面显示的代码工作得很好,是与客户端库相比,使用 API 的方法要简单得多,只需确保启用了要使用的特定 API。仅仅因为 API 密钥不受限制并不意味着您可以简单地使用他们的任何 API,我确保为其他可能觉得有用的人“修复”(取消注释)我发布的代码。


推荐阅读