Имя: Пароль:
1C
1С v8
чтение - декодирование ответа HTTP POST запроса
0 бегинер
 
25.03.19
16:36
в 1с получаю ответ с вебсервера по rest

Заголовки.Вставить("Accept-Encoding", "gzip");
Запрос.УстановитьТелоИзСтроки(строка_тела,"CESU-8");

...
Результат=Соединение.ОтправитьДляОбработки(Запрос);
тело_результата=Результат.ПолучитьТелоКакСтроку();
Текст = Новый ЗаписьТекста;
Текст.Открыть("c:\файл_gzip.zip");
Текст.ЗаписатьСтроку(тело_результата);
Текст.Закрыть();

ответ дается сжатый через gzip

ответ сохраняю в файл, пробую открыть - архиватором zip пишет не корректный формат.

как прочитать ответ в расшифрованном виде?
не обязательно автоматом - хоть через сохранение файла и открытие в архиваторе
1 бегинер
 
25.03.19
16:38
если отлаживаю это в бразуре через расширения  - отладка POST запросов (POSTMAN Для хрома), то ответ там сразу декодируется, так как браузер может декодить по gzip
2 бегинер
 
25.03.19
16:54
может я не правильно сохраняю ответ в текст файл?
3 Ёпрст
 
25.03.19
17:02
поставь кодировку в ЗаписатьСтроку
4 Nyoko
 
25.03.19
17:05
(0) Так есть же получить тело как двоичные данные ...
5 Ёпрст
 
25.03.19
17:05
ну или ПолучитьТелоКакДвоичныеДанные пользуй, будет тебе файло сразу
6 бегинер
 
25.03.19
17:09
ДвоичныеДанные = Результат.получитьТелоКакДвоичныеДанные();
ДвоичныеДанные.Записать("c:\файл_gzip3.zip");

(4) (5) спасибо
вот так получилось - открывает уже как архив - внутри него уже есть ответ! после разархивации внутри файла и есть уже раскодированный ответ

вот теперь уже зхотелось в 1с получить этот раскодированный ответ :)

может кто подскажет далее...
7 Ёпрст
 
25.03.19
17:14
ЧтениеZipФайла
8 Ёпрст
 
25.03.19
17:14
пользуй и читай как поток
9 бегинер
 
25.03.19
17:26
(7)

ДвоичныеДанные.Записать("c:\файл_gzip3.zip");
ФайлАрхива = Новый ЧтениеZIPФайла("c:\файл_gzip3.zip");
ФайлАрхива.ИзвлечьВсе("C:\",РежимВосстановленияПутейФайловZIP.НеВосстанавливать);


Ошибка при вызове конструктора (ЧтениеZIPФайла)
ФайлАрхива = Новый ЧтениеZIPФайла("c:\файл_gzip3.zip");
по причине:
Некорректный формат файла: c:\файл_gzip3.zip
10 бегинер
 
25.03.19
17:27
может 1с чтениеzip не умеет работать с gzip ?
11 бегинер
 
25.03.19
17:33
(10) не умеет....
12 Вафель
 
25.03.19
17:40
а если это убрать
Заголовки.Вставить("Accept-Encoding", "gzip");
13 Ёпрст
 
25.03.19
17:41
На вот, почитай на ночь
Распаковка gzip строки
14 бегинер
 
25.03.19
17:44
(12) у поставщика в api два вида ответа, без сжатия ответ - мне не нужен, и со сжатием - в нем полный ответ
(13) спасибо, не знал что так мудрено будет :)
15 Вафель
 
25.03.19
17:44
можно еще попробовать
Заголовки.Вставить("Accept-Encoding", "deflate");
16 бегинер
 
25.03.19
17:54
(15) в таком виде без сжатия дает ответ, который мне не нужен

в ответе со сжатием: там полная инфо, грубо в каком городе текстом посылка
в ответе без сжатия: не полная, только код города, потом еще надо заводить справочник городов, и по коду собирать ответ, актуализировать справочники - лишний напряг
17 бегинер
 
25.03.19
18:21
может кому пригодится, нашел бесплатный компонент архиватор
http://www.xstandard.com/en/documentation/xgzip/
качаем, регим через regsvr32

ДвоичныеДанные = Результат.получитьТелоКакДвоичныеДанные();
ДвоичныеДанные.Записать("c:\файл_gzip.zip");
архиватор=Новый COMОбъект("XStandard.GZip");
архиватор.Decompress ("c:\файл_gzip.zip", "C:\распакованный_файл_gzip");
архиватор=неопределено;
Файл = Новый ЧтениеТекста("C:\распакованный_файл_gzip",кодировкатекста.UTF8);
ВесьФайлОднойСтрокой = Файл.Прочитать();
Файл.Закрыть();
сообщить(ВесьФайлОднойСтрокой);

аллилуя :)