使用 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 作为执行此操作的简单方法。
- 下载或复制我上面提到的 serviceaccount JSON 文件。
- Activate gcloud 中的服务帐户使用:
gcloud auth activate-service-account SERVICE_ACCOUNT@DOMAIN.COM --key-file=/path/key.json
- 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)
我想用 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 作为执行此操作的简单方法。
- 下载或复制我上面提到的 serviceaccount JSON 文件。
- Activate gcloud 中的服务帐户使用:
gcloud auth activate-service-account SERVICE_ACCOUNT@DOMAIN.COM --key-file=/path/key.json
- 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)