使用 Postman 访问 Google 个索引 API

Using Postman to access Google Indexing APIs

我想用 Postman 测试 Google 索引 API。 我已经在 https://console.cloud.google.com/ 上正确配置了 api,以便在带有插件 Instant indexing 的 wordpress 站点上使用它,一切正常。 现在我只想与 Postman 进行 POST 调用,特别是我没有发现任何关于用于调用的身份验证类型 (Oauth 2) 的任何明确信息。

{
"error": {
    "code": 401,
    "message": "Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",
    "status": "UNAUTHENTICATED",
    "details": [
        {
            "@type": "type.googleapis.com/google.rpc.ErrorInfo",
            "reason": "CREDENTIALS_MISSING",
            "domain": "googleapis.com",
            "metadata": {
                "method": "google.indexing.v3.UrlService.PublishUrlNotification",
                "service": "indexing.googleapis.com"
            }
        }
    ]
}

}

谁能给我举个例子?谢谢。

如评论中所述,Google API 通常使用 OAuth2。一些例外情况可能会使用 API 密钥,但即便如此,大多数例外情况仍然限制您可以使用 API 密钥访问的数据与您可以使用 OAuth2

访问的数据

这个特定的 API 确实按照 docs 使用了 OAuth2。这意味着您需要一个访问令牌(如错误消息所述),因此您需要生成一个。


最简单的方法是根据 docs here.

使用多种编程语言之一的库

我将在 python 中给出一个简单的示例,因为这是我的首选语言。以下代码使用 google-auth 库 (docs). It's the base library to deal with credential objects. You will need to download the JSON representation for the service account you created. See the relevant docs。请注意,尽管访问令牌的默认生命周期为 3600,但您应该像处理密码一样处理此文件,就像处理访问令牌本身一样秒,又名 1 小时。

如果收到令牌已过期的错误消息,请创建一个新令牌。 阅读有关刷新令牌的信息,但这超出了这个问题的范围。

代码已在 virtualenv 上针对 python 3.10

进行了测试

requirements.txt

google-auth
requests

main.py

from google.oauth2 import service_account
import google.auth.transport.requests


# create credentials object
creds= service_account.Credentials.from_service_account_file("/path/to/serviceaccount.json")
# we need a scoped credentials object as per 
# https://developers.google.com/search/apis/indexing-api/v3/prereqs#requirements
scoped_creds = creds.with_scopes(['https://www.googleapis.com/auth/indexing'])

# create a request object for the refresh method
request = google.auth.transport.requests.Request()

# make the library do it's magic and get a token
scoped_creds.refresh(request)
print(scoped_creds.token)

这将打印出访问令牌。 (如果最后打印有点 (....),请将其删除。


另一个简单的选择是(滥用)使用 gcloud 命令行工具。有几个步骤可以开始工作。您可以使用 cloud shell 作为执行此操作的简单方法。

  1. 下载或复制我上面提到的 serviceaccount JSON 文件。
  2. Activate gcloud 中的服务帐户使用:
    gcloud auth activate-service-account SERVICE_ACCOUNT@DOMAIN.COM --key-file=/path/key.json
  3. Print 使用此命令的访问令牌: gcloud auth print-access-token

艰难而受虐的方法是手动使用 CURL 或 HTTPS 请求之类的东西来生成令牌。您可以随意这样做,但我只是要为此向您指出 the docs。后背有点疼


您可以按照 this answer 中的说明测试令牌。

现在您有了访问令牌,您可以在 POSTMAN 中使用它,方法是在调用的 header 中设置它。看到这个nice answer,但基本上添加了以下请求header key/value对,用生成的令牌替换TOKEN

  • 密钥:授权
  • 值: 持有人 令牌

对于任何感兴趣的人,我设法按照以下步骤使其工作:

  • 要使用 Postman 获取身份验证令牌,请先转到 https://console.cloud.google.com/apis/credentials and in your web application ID client set https://oauth.pstmn.io/v1/callback 作为授权重定向 URI

  • 现在在授权选项卡的 Postman 应用程序中 select OAuth 2.0 并根据您的 client_secret.json (image)

    配置字段
  • 现在点击'Get new access Token'你应该会得到它

  • 指定 url 并键入原始 json 正文 (image)