Хорошо, спасибо @DaImTo! Мы только что получили запрос на ограничение от Google.

ользую Nodejs для связи сGoogleApis v35.0.0 сказать Google обновить или удалить страницы из индекса Google. И я застрял в запросе multipart / mixed, тело multipart, когда я отправляю запрос черезПакетный запрос индексации Google.

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

У меня проблема с правильным форматом составного тела, когда я пытаюсь отправить запрос партиями. Я использую JWT (JSON Web Token) из GoogleApis, который расширился от oauth2 для аутентификации моей учетной записи и используюБиблиотека запросов v2.88.0 отправить запрос в гугл.

Поскольку библиотека запросов уже обрабатывает многокомпонентную границу, поэтому я не отправляю ее как одну из опций запроса. Я также проверяю информацию в 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?

Спасибо заранее!

Ответы на вопрос(2)

Ваш ответ на вопрос