Google Indexing API - 403 "Запрещенный ответ"
Я звоню в API индексации Google для объявлений о вакансиях:
private $client;
private $httpClient;
public function initClient($kernel)
{
$this->client = new \Google_Client();
$this->client->setAuthConfig(JSON_KEY_HERE);
$this->client->addScope('https://www.googleapis.com/auth/indexing');
$this->httpClient = $this->client->authorize();
}
public function sendJob()
{
$endpoint = 'https://indexing.googleapis.com/v3/urlNotifications:publish';
$content = "{
\"url\": \"URL_HERE\",
\"type\": \"URL_UPDATED\"
}";
$response = $this->httpClient->post($endpoint, array('body' => $content));
}
При вызове API выдается ответ "403 - запрещено".
Есть идеи, что на самом деле означает эта ошибка? Я правильно создал учетную запись службы, но не могу повторить успех из моей среды разработки.
6 ответов
Убедитесь, что вы добавили учетную запись службы в качестве владельца в Google Search Console, как описано здесь: https://developers.google.com/search/apis/indexing-api/v3/prereqs.
Моя проблема заключалась в том, что у нас было несколько записей для домена в консоли поиска (с и без www и с и без https); после добавления учетной записи сервиса как владельца ко всем 4 записям она работает.
Вот ответ после пары дней головной боли. Откройте консоль поиска Google.
Предварительное условие: у вас уже должна быть учетная запись службы Google.
нажмите кнопку с тремя точками и нажмите кнопку управления собственниками:
добавить адрес электронной почты учетной записи службы Google в качестве новых владельцев:
"Убедитесь, что вы добавили учетную запись службы в качестве владельца в Google Search Console"
Ага. Используйте следующий фрагмент кода, чтобы проверить ответ тела на предмет более подробного сообщения об ошибке.
var body = result.Content.ReadAsStringAsync().Result;
если сообщение об ошибке выглядит следующим образом, то это та же проблема.
"message": "В доступе отказано. Не удалось подтвердить владение URL-адресом."
Стоит отметить: новая версия поисковой консоли отсутствует. В нижней части левого меню находится ссылка "перейти к старой версии". щелкните по нему и затем выберите "детали проверки" в меню шестеренки (вверху справа). Далее нажмите на ссылку с надписью "Детали проверки" (серьезно!). Здесь вы, наконец, увидите список подтвержденных владельцев в нижней части страницы. Вы можете добавить нового владельца здесь, используя адрес электронной почты вашей учетной записи службы (адрес также можно найти в вашем файле ключей JSON).
Если добавить комментарий @Glennstar и ответ @JMs, то ссылка на старую версию больше не существует (возможно, у меня никогда не было старой версии), но если вы щелкнете по 3 вертикальным точкам справа от владельца пользователя "(вы)" и выберите "управлять свойством" владельцы ", затем на следующей странице щелкните каждую из ссылок" подробности проверки "справа от вариантов вашего домена (example.com, http://www.example.com/, https://www.example.com/ т. д. и т. д. у вас есть) и добавьте владельца, т.е. вставьте адрес электронной почты gserviceaccount.com из json, в котором также будет указано право собственности, делегированное текущим владельцем этому адресу электронной почты.
После того, как статус этого адреса электронной почты изменился с "полного" разрешения на "владельца" на странице консоли поиска, я мог затем выполнить штраф в порядке и исходная ошибка 403 о невозможности подтвердить владение URL-адресом исчезла. Спасибо, ребята, без этого бы не поняли.
Я боролся с этим сегодня целый день... решение было в том, что я забыл активировать API-интерфейс индексатора в облачной консоли Google.
В моем случае проблема была в IP.
Итак, у меня возникла эта проблема, затем я исправил ее, используя право собственности, как и другое предложение сверху, которое прямо сейчас, в 2023 году, вам следует перейти наSettings>Users And Permissions
чтобы добавить новое право собственности на каждое свойство (если у вас их несколько).
Затем, за несколько дней до этого, из-за беспокойства о своих ресурсах и т. д. я перенес свой проект на VPS, а затем проблема начала возникать снова.
Я клонировал проект и протестировал его на общем хосте раньше, и он работал, но на новом VPS это не работало.
Дело в том, что и общий хост, и VPS были из ИРАНА, поскольку мой проект предназначен для иранских пользователей, и после проверки услуг обоих центров обработки данных я понял, что компания, которая предоставила мне общий хост, они установили что-то вроде анти-ограничения, поэтому наш проект на этом общем хосте может получать доступ и выполнять любые запросы к веб-сайтам с ограниченным доступом, таким как Google, которые в некоторых случаях блокируются в моей стране самими собой, а не нами.
Опять же, в VPS, когда я понял, в чем может быть проблема, я попытался использовать эти анти-ограничения на VPS, но результат не работал, что и ДОЛЖНО быть, так как я использовал их в своем несколько компьютеров и т. д. они всегда работают.
Потом я подошёл к последнему, чего я боялся, а именно к заблокированному IP по какой-то причине...
Возможно, я не совсем точен на данный момент, но это было мое последнее предположение: я могу использовать Firebase для отправки сообщения, но не могу использоватьgoogle-indexing-api
.
Прямо сейчас я использую общий хост из центра обработки данных, который применяет эти антиограничения в сети и отправляет запросы в Google, используя этот хост.
Надеюсь, это может помочь.