Имя: Пароль:
1C
1С v8
Распаковка текста сжатого gzip
,
0 jamesgold
 
27.10.20
16:47
Добрый день, прошу помочь!
С сервера получаю файл сжатого методом GZIP

XMLHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
XMLHttp.Option(2,"UTF-8");
XMLHttp.Option(4, 13056);
XMLHttp.Open("GET", АдресФайлаВИнтернете, Ложь);
XMLHttp.send();
Отв = XMLHttp.responseText;

Скрин ответа:
http://prntscr.com/v7xpkf
Как получить читаемый текст?
1 H A D G E H O G s
 
27.10.20
16:53
Можно средствами платформы через ComSafeArray и вот это все, но есть уже готовое тут

https://1c-programmer-blog.ru/programmirovanie/rabota-s-setyu-v-1s-obekty-winhttprequest-i-stream-ado.html
2 polosov
 
27.10.20
16:53
(0) Это Zip без заголовка.
Интегрируй в  свое решение модуль https://github.com/vbondarevsky/Connector
Там все реализовано.
3 jamesgold
 
27.10.20
17:01
(1) Пробовал, не решило проблему
4 jamesgold
 
27.10.20
17:03
(2) Платформа не подходит.
5 jamesgold
 
27.10.20
17:10
(1) WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1"); //WinHttpRequest
    WinHttp.Open("GET", АдресФайлаВИнтернете, Ложь);
    WinHttp.Send();
    Если WinHttp.Status = 200 Тогда
        Stream = Новый COMОбъект("ADODB.Stream");
        
        Stream.Type = 1;
        Stream.Mode = 3;
        
        Stream.Open();
        Stream.Write(WinHttp.ResponseBody);
        Stream.SaveToFile(ИмяПромежуточногоФайла, 2);
        Stream.Close();
        Stream = Неопределено;
    Иначе
        Сообщить("HTTP " + WinHttp.Status + " " + WinHttp.StatusText);
        Возврат;
    КонецЕсли;

В ИмяПромежуточногоФайла вот такое содержимое:
http://prntscr.com/v7ycq1
6 polosov
 
27.10.20
17:28
(5) Если совсем старая, то используй 7zip. Он умеет распаковывать такое.
7 jamesgold
 
27.10.20
18:08
(6) Есть пример такой распаковки?
8 jamesgold
 
27.10.20
18:47
ап
9 МихаилМ
 
27.10.20
19:11
нет метода gzip.есть утилита  gzip ,которая сжимает по алгоритму  deflate, который стандартен для 1с
10 jamesgold
 
27.10.20
19:46
(9) Есть пример декомпрессии?
11 Armando
 
28.10.20
00:45
Использовал эту ВК http://catalog.mista.ru/public/487987/  Работает
13 Кулибин
 
28.10.20
02:49
Запустить Приложение(7z.exe e путь -aoa -o путь2, путь3, истина) так работает, если по памяти в параметрах не ошибся ;-)
14 jamesgold
 
28.10.20
10:28
(13) Не работает распаковка 7z
http://prntscr.com/v8fzk2
15 Кулибин
 
28.10.20
10:40
(14) Он винраром открывается? Извлечь получается? Если да, то формат командной строки только. Попробуй перед распаковкой файл переименовать - очисти расширение. Всё должно работать.
16 BaHgaJI
 
28.10.20
10:42
17 arsik
 
гуру
28.10.20
10:57
(0) Платформа то какая? 77?
18 mistеr
 
28.10.20
11:04
(2) Я не понял, она за собой Питон тащит?
19 arsik
 
гуру
28.10.20
11:06
А если это файл через браузер типа хрома скачать? Что в итоге будет?
20 polosov
 
28.10.20
11:15
(18) Кто "она"?
21 Кулибин
 
28.10.20
11:15
(13) ну, тогда так попробуй что ли ;-) ЗапуститьПриложение(""""+"C:\Program Files\WinRAR\WinRAR.exe"+""""+" x "+Путь+" *.* "+Сред(Путь,1,СтрДлина(Путь)-4)+"\"+"""");
22 jamesgold
 
28.10.20
11:19
(17) 1С:Предприятие 8.2 (8.2.19.83)
23 jamesgold
 
28.10.20
11:21
(15) Действительно, если сменить файлу расширение на zip и распаковать его, файл становится читаемым
24 mistеr
 
28.10.20
11:21
(20) Библиотека по ссылке.
25 jamesgold
 
28.10.20
11:22
(19) файл сразу в читаемом виде
26 polosov
 
28.10.20
11:25
(24) Это просто код на 1С. Можно запихнуть его в общий модуль и пользоваться.
27 arsik
 
гуру
28.10.20
11:32
(25) (22) А нафига через WinHttpRequest? В 1С есть встроенные методы работы с HTTP. Они тебе сразу норм вернут.
28 mistеr
 
28.10.20
11:34
(26) Спасибо, взял на заметку.
29 arsik
 
гуру
28.10.20
11:38
+ (27) Еще можно в заголовке запроса указать  
XMLHttp.SetRequestHeader("Accept-Encoding", "identity");
Тогда сервер будет отдавать чистые данные, без архивирования
30 polosov
 
28.10.20
11:39
(28) Он очень удобный. Все интеграции пишу с его использованием. С минимальными изменениями под свои нужды.
31 jamesgold
 
28.10.20
11:45
(21) Распаковка прекрасна работает
32 jamesgold
 
28.10.20
13:24
Всем спасибо, за ответы! Нормальное решение доступно только за стармани, Кулибин подсказал как обойтись с помощью костыля. На будущее после обновления платформы буду использовать http://catalog.mista.ru/public/487987/
33 arsik
 
гуру
28.10.20
13:37
(32) Да уж. Нихера то ты не понял.
34 jamesgold
 
28.10.20
14:07
(33) не работает
http://prntscr.com/v8kwae
35 jamesgold
 
28.10.20
14:09
(27) Можно пример?
36 arsik
 
гуру
28.10.20
14:19
(34) Значит сервер не обрабатывает этот заголовок и шлет тебе в gzip
(35) https://bit.ly/3muYzZ7 Стандартными средствами 1С тебе не нужно будет распаковывать из gzip. Платформа сама поймет что пришли сжатые данные. Распакует их и вернет тебе исходный файл.
37 polosov
 
28.10.20
14:47
(36) "Стандартными средствами 1С тебе не нужно будет распаковывать из gzip"
Фантазии.
38 Кулибин
 
28.10.20
14:54
(37) ;-)
39 arsik
 
гуру
28.10.20
15:02
(37) Можем проверить.
40 arsik
 
гуру
28.10.20
16:04
(37) Сорян. Реально. Платформа это не обрабатывает.
41 arsik
 
гуру
28.10.20
16:16
Можно еще попробовать в запросе передать
XMLHttp.SetRequestHeader("Accept-Encoding", "deflate");
42 Кулибин
 
29.10.20
04:34
(32) почему костыль? разберись, почему 7зэт у тебя не распаковывает, или всё же дело было в расширении? засунь его двоичкой в макет и будет работать вечно ;-) заодно попробуй на лету определить тип файла при чтении /не архив/архив/какой архив/ перед обработкой...
43 Armando
 
29.10.20
10:03
(32) Зачем ждать обновления? Оно и на 8.2 работает. http://forum.infostart.ru/forum28/topic148149/message2451452/#message2451452
44 Serginio1
 
29.10.20
17:02
45 polosov
 
29.10.20
17:12
(44) Статья, как пример принципа ХХВП.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший