Как я могу сохранить начальный текстовый / событийный ответ на запрос get в JavaScript, когда сервер никогда не прекращает загрузку?

#javascript #api #http #get #request

Вопрос:

Я пытаюсь извлечь некоторые простые значения из API. Это URL-адрес запроса:

https://pool.rplant.xyz/api2/poolminer2x/raptoreum/RThRfoQJg8qsoStLk7QdThQGmpbFUCtvnk/UlRoUmZvUUpnOHFzb1N0TGs3UWRUaFFHbXBiRlVDdHZua3x4

Кажется, что каким-то образом сервер переводит страницу в состояние постоянного обновления. Будь то в браузере или через мой код, загрузка никогда не завершается, но я вижу ответ JSON в браузере. Примерно через минуту к оригиналу в браузере добавляется другой JSON-ответ.

Это фрагмент кода, который я использую в настоящее время, и, похоже, он никогда не завершается, хотя я ждал не более 5 минут.

 var response = UrlFetchApp.fetch("https://pool.rplant.xyz/api2/poolminer2x/raptoreum/RThRfoQJg8qsoStLk7QdThQGmpbFUCtvnk/UlRoUmZvUUpnOHFzb1N0TGs3UWRUaFFHbXBiRlVDdHZua3x4")
var json = JSON.parse(response.getContentText())
 

Есть ли у меня способ завершить бесконечный цикл и получить то, что у меня уже есть в качестве ответа?

Редактировать:

Как указал @JeremyThille, тип ответа — text/event-stream но я все еще не уверен, кто будет обрабатывать этот тип ответа.

Комментарии:

1. Я попробовал с Postman, и Content-Type возвращенный результат есть text/event-stream . Это объясняет, почему браузер никогда не прекращает загрузку: это поток. Тем не менее, я впервые вижу это

2. @JeremyThille Ах, ха-ха, да, сначала я не видел вашего комментария, но тоже только что заметил то же самое. Я не уверен, как с этим справиться text/event-stream . Спасибо, что изучили это!

Ответ №1:

Похоже, что правильный способ обработки text/event-stream ответов обычно с EventSource помощью однако я не могу использовать внешние библиотеки для моего варианта использования в таблицах Google.

 var source = new EventSource('https://pool.rplant.xyz/api2/poolminer2x/raptoreum/RThRfoQJg8qsoStLk7QdThQGmpbFUCtvnk/UlRoUmZvUUpnOHFzb1N0TGs3UWRUaFFHbXBiRlVDdHZua3x4');
source.addEventListener('message', function(e) {
  console.log(e.data);
}, false);