Я хотел бы протестировать 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"
}
}
]
}
}
Кто-нибудь может привести мне пример? Спасибо.
Это OAuth2, посмотрите на сообщение об ошибке почтальона, которое я только что опубликовал.
Как указано в комментариях, 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. Чтобы приступить к работе, нужно выполнить несколько шагов. Вы можете использовать облачная оболочка как простой способ сделать это.
gcloud auth activate-service-account [email protected] --key-file=/path/key.json
gcloud auth print-access-token
Жестким и мазохистским способом было бы использовать что-то вроде запросов CURL или HTTPS вручную для генерации токена. Не стесняйтесь, но я просто укажу вам на документы для этого. Это немного боль в задней части.
Вы можете протестировать токен, как описано в этот ответ.
Теперь, когда у вас есть токен доступа, вы можете использовать его в POSTMAN, установив его в заголовке вызова. См. этот хороший ответ, но в основном добавьте следующую пару ключ/значение заголовка запроса, заменив ТОКЕН сгенерированным токеном.
Ух ты! Это подробный ответ. Благодарю вас!
Для всех, кто заинтересован, мне удалось заставить его работать, выполнив следующие действия:
Чтобы получить токен аутентификации с помощью Postman, сначала перейдите к https://console.cloud.google.com/apis/credentials, а в идентификаторе вашего веб-приложения установите https://oauth.pstmn.io/v1/обратный вызов в качестве авторизованных URI перенаправления.
Теперь в приложении Postman на вкладке «Авторизация» выберите OAuth 2.0 и настройте поля в соответствии с вашим client_secret.json (изображение).
Теперь нажмите «Получить новый токен доступа», и вы должны его получить.
Укажите URL-адрес и введите как необработанное тело json (изображение)
StackOverflow плохо работает с вопросом, структурированным таким образом. Рекомендуемый формат вопроса — провести небольшое исследование, предоставить хотя бы часть примера кода и спросить, где вы ошибаетесь (желательно с сообщением об ошибке или другой уточняющей информацией). К сведению: я подозреваю, что Google использует OAuth; именно так я взаимодействовал с их API в прошлый раз.