Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

чтение - декодирование ответа HTTP POST запроса

чтение - декодирование ответа  HTTP POST запроса
Я
   бегинер
 
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
поставь кодировку в ЗаписатьСтроку
   Nyoko
 
4 - 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);
ВесьФайлОднойСтрокой = Файл.Прочитать();
Файл.Закрыть();
сообщить(ВесьФайлОднойСтрокой);

аллилуя :)

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.