Имя: Пароль:
1C
 
Потоковое чтение ответа Get-запроса возможно ли в 1С?
,
0 Гений 1С
 
гуру
27.01.23
21:29
Очень большой ответ (JSON), можно ли разбить или читать потоково, если на сайте нет пагинации?
1 vde69
 
27.01.23
21:39
что значит читать потоково?
2 Garykom
 
гуру
27.01.23
21:39
НТТРСоединение.Получить(Адрес, ИмяВходящегоФайла);
И читай по кусочкам файл
3 Garykom
 
гуру
27.01.23
21:41
HTTPСоединение (HTTPConnection)
Получить (Get)
Синтаксис:
Получить(<HTTPЗапрос>, <ИмяВыходногоФайла>)
Параметры:
<HTTPЗапрос> (обязательный)
Тип: HTTPЗапрос.
HTTP-запрос.
<ИмяВыходногоФайла> (необязательный)
Тип: Строка.
Имя файла, в который помещаются данные полученного ресурса. Если не указан или содержит пустую строку, то тело ответа может быть получено из объекта HTTPОтвет.
Возвращаемое значение:
Тип: HTTPОтвет.
Описание:
Получает данные с HTTP-сервера, используя GET-запрос.
Доступность:
Сервер, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.0.
Описание изменено в версии 8.3.21.
4 НафНаф
 
27.01.23
21:43
и поставь уже 64-битный клиент
5 vde69
 
27.01.23
21:46
(0) любой сервис если он выдает json на входе имеет данные (параметры или post или еще какие) по которым можно сделать файл не большим,

вероятно ты просто не в курсе чего от тебя ждет сервер и посылаешь ему запрос без этих параметров.

то есть вместо пагинатора тебе нужно использовать параметры запроса
6 vde69
 
27.01.23
21:47
(5) +

опять что-то ломаешь :)
7 magicSan
 
28.01.23
04:32
человек 20 лет в 1с я его помню 10 лет назад - ему лоботомию сделали или аккаунт продал? От темы к теме тупущие вопросы
8 NorthWind
 
28.01.23
07:26
ну это смотря кто апи проектировал :) мы ж этого не знаем...
9 novichok79
 
28.01.23
09:26
1Сина не умеет работать по TCP-IP из коробки, а для того что ты описал необходимо читать данные из сокета в буфер определенного размера. Кроме этого, JSON по частям - очень плохая затея, тебе придется где-то склеивать данные, если в буфер попало значение строкового поля неполностью. А раз склеивать придётся, все равно придется загружать это дело в память. Обычно в таких случаях в API предусмотрена пагинация. Хотя если API писал такой же гений, возможно её и нет.
10 Гений 1С
 
гуру
28.01.23
12:36
(4) а если COM понадобится - обратно 32? ггг... Забавный решала вопросов.
(2) Интересно, спасибо, попробую.
11 FirstLine Support
 
28.01.23
12:45
(7) он ИП-шник, имейте уважение
12 Гений 1С
 
гуру
28.01.23
12:53
(2) Спасибо, помогло. Правда строку длинной 205 миллионов символов читала 3 минуты.
Но зато можно теперь не напрягать разработчиков API с пагинацией.
Это хорошо.


    Запрос = Новый HTTPЗапрос(КомандаСПараметрами);
    ИмяФайла = ПолучитьИмяВременногоФайла("");
    Ответ = Соединение.Получить(Запрос, ИмяФайла);
    Т = Новый ТекстовыйДокумент();
    Т.Прочитать(ИмяФайла);
    УдалитьФайлы(ИмяФайла);
    ОтветСтрокой = Т.ПолучитьТекст();
    
    //ОтветСтрокой = Ответ.ПолучитьТелоКакСтроку();
    
    Если Ответ.КодСостояния = 200 Тогда
        ЧтениеJSON = Новый ЧтениеJSON;
        ЧтениеJSON.УстановитьСтроку(ОтветСтрокой);
        Р.JSON = ПрочитатьJSON(ЧтениеJSON,Истина);
        Р.ОК = истина;
    Иначе
        Р.Текст = "Ошибка. Код ответа: " + Ответ.КодСостояния + " Ответ строкой: " + ОтветСтрокой;
    КонецЕсли;

13 Asmody
 
28.01.23
15:51
(12) "строку длинной 205 миллионов символов" - за такое API надо гнать из профессии сцаными тряпками
14 zva
 
28.01.23
16:44
Чтение = Новый ЧтениеJSON;
Чтение.ОткрытьПоток(Ответ.ПолучитьТелоКакПоток());
ДанныеОтвета = ПрочитатьJSON(Чтение, Истина);
15 Garykom
 
гуру
28.01.23
18:25
(12) >строку длинной 205 миллионов символов читала 3 минуты

радуйся что всего 3 минуты для json
был бы xml и трем часам радовался
16 Гений 1С
 
гуру
28.01.23
19:53
(14) спасибо, попробую.
17 Сергиус
 
29.01.23
01:51
(7)Подобные вопросы у него всегда были - так что в этом стабильность)
18 Сергиус
 
29.01.23
01:53
(10)А что, COM  в 64-х не работает что ли?
19 НафНаф
 
29.01.23
07:54
(12) так ты просто безграмотный оказался? Тю...
20 Garykom
 
гуру
29.01.23
08:51
>Если Ответ.КодСостояния = 200 Тогда

прикольная грабля что почти всегда только 200 код ответа принимают
хотя https://ru.wikipedia.org/wiki/Список_кодов_состояния_HTTP#2xx
все 2ХХ ответы успешные
21 Garykom
 
гуру
29.01.23
08:51
22 Гений 1С
 
гуру
29.01.23
12:45
(18) не всё оборудование имеет дрова под 64, например