Использование Postman для доступа к API индексирования Google

Я хотел бы протестировать API индексирования Google с помощью Postman. Я уже правильно настроил API на https://console.cloud.google.com/ для использования его на сайте WordPress с плагином Instant indexing, и все работает нормально. Теперь я просто хочу сделать POST-вызов с Postman, в частности, я не нашел ничего ясного о типе аутентификации (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"
            }
        }
    ]
}

}

Кто-нибудь может привести мне пример? Спасибо.

StackOverflow плохо работает с вопросом, структурированным таким образом. Рекомендуемый формат вопроса — провести небольшое исследование, предоставить хотя бы часть примера кода и спросить, где вы ошибаетесь (желательно с сообщением об ошибке или другой уточняющей информацией). К сведению: я подозреваю, что Google использует OAuth; именно так я взаимодействовал с их API в прошлый раз.

ryanwebjackson 06.05.2022 16:25

Это OAuth2, посмотрите на сообщение об ошибке почтальона, которое я только что опубликовал.

hhh 06.05.2022 17:10
Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
2
2
54
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Как указано в комментариях, Google API обычно используют OAuth2. В некоторых исключениях может использоваться ключ API, но даже в этом случае большинство из них по-прежнему ограничивают данные, к которым вы можете получить доступ с помощью ключа API, по сравнению с данными, к которым вы можете получить доступ с помощью OAuth2.

Этот конкретный API действительно использует OAuth2 в соответствии с документы. Это означает, что вам нужен токен доступа (как указано в сообщении об ошибке), поэтому вам нужно будет его сгенерировать.


Проще всего было бы использовать библиотеку для одного из многих языков программирования, согласно документы здесь.

Я приведу простой пример на питоне, так как это мой любимый язык. В следующем коде используется библиотека google-auth (документы). Это базовая библиотека для работы с объектами учетных данных. Вам нужно будет загрузить представление JSON для созданной вами учетной записи службы. См. соответствующий документы. Обратите внимание, что вы должны обращаться с этим файлом так, как если бы он был паролем, так же, как и с самим токеном доступа, хотя срок действия токена доступа по умолчанию составляет 3600 секунд, то есть 1 час.

Если вы получили сообщение об ошибке, что срок действия токена истек, создайте новый. Прочтите о токенах обновления для этого, но это выходит за рамки этого вопроса.

Код был протестирован на виртуальная среда для Python 3.10.

требования.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)

Это распечатает токен доступа. (если в конце печатаются точки (....), удалите их.


Другим простым вариантом было бы (ab) использование инструмента командной строки gcloud. Чтобы приступить к работе, нужно выполнить несколько шагов. Вы можете использовать облачная оболочка как простой способ сделать это.

  1. Загрузите или скопируйте JSON-файл serviceaccount, о котором я упоминал выше.
  2. Активировать сервисный аккаунт в gcloud, использующий:
    gcloud auth activate-service-account [email protected] --key-file=/path/key.json
  3. Распечатать маркер доступа с помощью этой команды: gcloud auth print-access-token

Жестким и мазохистским способом было бы использовать что-то вроде запросов CURL или HTTPS вручную для генерации токена. Не стесняйтесь, но я просто укажу вам на документы для этого. Это немного боль в задней части.


Вы можете протестировать токен, как описано в этот ответ.

Теперь, когда у вас есть токен доступа, вы можете использовать его в POSTMAN, установив его в заголовке вызова. См. этот хороший ответ, но в основном добавьте следующую пару ключ/значение заголовка запроса, заменив ТОКЕН сгенерированным токеном.

  • КЛЮЧ: Авторизация
  • ЦЕННОСТЬ: Носитель ТОКЕН

Ух ты! Это подробный ответ. Благодарю вас!

hhh 11.05.2022 09:46

Для всех, кто заинтересован, мне удалось заставить его работать, выполнив следующие действия:

  • Чтобы получить токен аутентификации с помощью Postman, сначала перейдите к https://console.cloud.google.com/apis/credentials, а в идентификаторе вашего веб-приложения установите https://oauth.pstmn.io/v1/обратный вызов в качестве авторизованных URI перенаправления.

  • Теперь в приложении Postman на вкладке «Авторизация» выберите OAuth 2.0 и настройте поля в соответствии с вашим client_secret.json (изображение).

  • Теперь нажмите «Получить новый токен доступа», и вы должны его получить.

  • Укажите URL-адрес и введите как необработанное тело json (изображение)

Другие вопросы по теме