Попытка получить статус уведомления из API индекса Google возвращает 403 Запрещено, как я могу это исправить?

70
6

Я - новый программист с очень небольшим опытом, я пытаюсь получить доступ к API индексации Google, чтобы иметь возможность обновлять индекс Google, когда новые вакансии появляются на нашем сайте в Нидерландах.

Первый шаг для меня - попытаться заставить работать: GET https://indexing.googleapis.com/v3/urlNotifications/metadata, однако попытка этого привела к ошибке в качестве ответа с 403: Forbidden ответ.

Несколько вещей, которые я проверил, чтобы сделать эту работу до сих пор:

    Учетная запись службы должна иметь доступ как владелец. Токен - это новый токен, изготовленный 16-04-2019. Я подтвержден как владелец сайта. И API индексации включен.

Отсутствие у меня опыта программирования заставляет меня сделать вывод, что с моим кодом что-то не так, а именно:

class AccessTokenGenerate
{
public static async Task<string> GetAccessTokenFromJSONKeyAsync(string
jsonKeyFilePath, params string[] scopes)
{
using (var stream = new FileStream(jsonKeyFilePath, FileMode.Open,
FileAccess.Read))
{
return await GoogleCredential
.FromStream(stream) // Loads key file
.CreateScoped(scopes) // Gathers scopes requested
.UnderlyingCredential // Gets the credentials
.GetAccessTokenForRequestAsync(); // Gets the Access Token
}
}

public static string GetAccessTokenFromJSONKey(string jsonKeyFilePath,
params string[] scopes)
{
return GetAccessTokenFromJSONKeyAsync(jsonKeyFilePath,
scopes).Result;
}

public static async Task<string> GetTokenAndCall()
{
var keyFilePath = @"E:\Here_Is_The_Path\KeyFileName.json";
var scopes = new[] { "https://www.googleapis.com/auth/indexing" };

GoogleCredential credential;
using (var stream = new FileStream(keyFilePath, FileMode.Open,
FileAccess.Read))
{
credential = GoogleCredential.FromStream(stream)
.CreateScoped(scopes);
}

var token = await
credential.UnderlyingCredential.GetAccessTokenForRequestAsync();
return token;
}

public static string GetToken()
{
var task = GetTokenAndCall();
task.Wait();
var result = task.Result;
return result;
}
}

И главное, где я использую токен для моего запроса:

class Program
{
static void Main(string[] args)
{
var token = AccessTokenGenerate.GetToken();
string responseString = "";
string uri2 =
"https://indexing.googleapis.com/v3/urlNotifications/metadataurl=https%3A%2F%2Fwww.WEBSITEURIANDCODEDHERE.nl";

WebRequest request = WebRequest.Create(uri2);
request.PreAuthenticate = true;

request.ContentType = "application/json";
request.Headers.Add("Authorization", "Bearer " + token);
request.Method = "GET";
using (HttpWebResponse response =
(HttpWebResponse)request.GetResponse())
using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream))
{
responseString = reader.ReadToEnd();
}

Console.WriteLine(responseString);
Console.ReadKey();
}
}

Я надеялся увидеть ответ в выводе консоли, к сожалению, я получаю ошибку 403: Forbidden когда программа достигает строки:

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())

Буду очень признателен за совет, даже если он не связан напрямую с проблемой. Например, если я нарушаю этикет Qaru или демонстрирую плохие привычки кодирования.

ОБНОВЛЕНИЕ: После следования решению в разделе Ошибка 403 при использовании Google Indexing API я заметил, что неправильно добавил учетную запись службы.

Я обновил до 404 ошибки. И немного поборолся с этим, прежде чем выяснить, как закрыть этот пост, спасибо Мило за редактирование!

спросил(а) 2019-04-16T17:13:00+03:00 7 месяцев, 3 недели назад
0
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема