Я использую Nodejs для соединения с GoogleApis v35.0.0 , чтобы сообщить Google об обновлении или удалении страниц из индекса Google.И я застрял в многочастном / смешанном запросе, теле multipart, когда я отправляю запрос через Пакетный запрос индексации Google .
Я мог отправить отдельный запрос на обновление страницы в Google с помощьюследуя документации API индексации .Но так как Google имеет ограниченную квоту максимум в 200 запросов в день, и мне нужно обновить больше URL, чем это.Итак, я пытаюсь использовать пакетный запрос индексации Google, который может группировать не более 100 отдельных запросов, и он считается как 1 запрос.
У меня проблема с правильным форматом составного тела при попытке отправитьзапрос партиями.Я использую JWT (JSON Web Token) GoogleApis, который расширился от oauth2 для аутентификации моей учетной записи, и использую библиотеку запросов v2.88.0 для отправки запроса в Google.
Поскольку библиотека запросов уже обрабатывает многочастную границу, поэтому я не отправляю ее в качестве одной из опций запроса.Я также проверяю информацию в multipart / mixed библиотеки npm-запросов, но я нашел только одну похожую, но не ту же, что и multipart / related (https://github.com/request/request#multipartrelated).
Согласно части тела пакетного запросапример из Google , мне нужно использовать multipart / mixed в качестве типа контента в основном запросе:
POST /batch HTTP/1.1
Host: indexing.googleapis.com
Content-Length: content_length
Content-Type: multipart/mixed; boundary="===============7330845974216740156=="
Authorization: Bearer oauth2_token
--===============7330845974216740156==
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-ID: <b29c5de2-0db4-490b-b421-6a51b598bd22+2>
POST /v3/urlNotifications:publish [1]
Content-Type: application/json
accept: application/json
content-length: 58
{ "url": "http://example.com/jobs/42", "type": "URL_UPDATED" }
Вот мой код:
return jwtClient.authorize(function(err, tokens) {
if (err) {
console.log(err);
return;
}
let options = {
url: 'https://indexing.googleapis.com/batch',
method: 'POST',
headers: {
'Content-Type': 'multipart/mixed'
},
auth: { 'bearer': tokens.access_token },
multipart: [
{
body: JSON.stringify({
headers: {
'Content-Type': 'application/http'
},
method: 'POST',
url: 'https://indexing.googleapis.com/v3/urlNotifications:publish',
body: {
'Content-Type': 'application/json',
url: 'https://www.test.com/es/1234',
type: 'URL_UPDATED'
}
})
}
]
};
request(options, function (error, response, body) {
console.log(body);
});
});
Я получаюошибка в теле multipart, я не знаю, какой тип тела ожидает пакетный запрос индексации Google. Похоже, что все внутри тела multipart рассматривают как заголовки. Но согласно документации формат пакетного запроса говоритчто «Каждая часть начинается со своего собственного HTTP-заголовка Content-Type: application / http. Тело каждой части представляет собой полный HTTP-запрос со своим собственным глаголом, URL-адресом, заголовками и телом». Для получения более подробной информации проверьте: https://cloud.google.com/storage/docs/json_api/v1/how-tos/batch.
Однако при выполнении кода я получаю следующую ошибку:
{
"error": {
"code": 400,
"message": "Failed to parse batch request, error: Failed in parsing HTTP headers: {\"Content-Type\":\"application/http\",\"method\":\"POST\",\"url\":\"https://indexing.googleapis.com/v3/urlNotifications:publish\",\"body\":{\"Content-Type\":\"application/json\",\"url\":\"https://www.test.com/es/1234\",\"type\":\"URL_UPDATED\"}}\n. Received batch body: ",
"status": "INVALID_ARGUMENT"
}
}
Кто-нибудь знает, какой яЯвляется ли правильный формат тела внутри multipart, когда он запрашивает пакетный запрос индексации Google?
Спасибо заранее!