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

Распаковка текста сжатого gzip

Распаковка текста сжатого gzip
Я
   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
Как получить читаемый текст?
   H A D G E H O G s
 
1 - 27.10.20 - 16:53
Можно средствами платформы через ComSafeArray и вот это все, но есть уже готовое тут

https://1c-programmer-blog.ru/programmirovanie/rabota-s-setyu-v-1s-obekty-winhttprequest-i-stream-ado.html
   polosov
 
2 - 27.10.20 - 16:53
(0) Это Zip без заголовка.
Интегрируй в  свое решение модуль https://github.com/vbondarevsky/Connector
Там все реализовано.
   jamesgold
 
3 - 27.10.20 - 17:01
(1) Пробовал, не решило проблему
   jamesgold
 
4 - 27.10.20 - 17:03
(2) Платформа не подходит.
   jamesgold
 
5 - 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
   polosov
 
6 - 27.10.20 - 17:28
(5) Если совсем старая, то используй 7zip. Он умеет распаковывать такое.
   jamesgold
 
7 - 27.10.20 - 18:08
(6) Есть пример такой распаковки?
   jamesgold
 
8 - 27.10.20 - 18:47
ап
   МихаилМ
 
9 - 27.10.20 - 19:11
нет метода gzip.есть утилита  gzip ,которая сжимает по алгоритму  deflate, который стандартен для 1с
   jamesgold
 
10 - 27.10.20 - 19:46
(9) Есть пример декомпрессии?
   Armando
 
11 - 28.10.20 - 00:45
Использовал эту ВК http://catalog.mista.ru/public/487987/  Работает
   Кулибин
 
13 - 28.10.20 - 02:49
Запустить Приложение(7z.exe e путь -aoa -o путь2, путь3, истина) так работает, если по памяти в параметрах не ошибся ;-)
   jamesgold
 
14 - 28.10.20 - 10:28
(13) Не работает распаковка 7z
http://prntscr.com/v8fzk2
   Кулибин
 
15 - 28.10.20 - 10:40
(14) Он винраром открывается? Извлечь получается? Если да, то формат командной строки только. Попробуй перед распаковкой файл переименовать - очисти расширение. Всё должно работать.
   BaHgaJI
 
16 - 28.10.20 - 10:42
   arsik
 
17 - 28.10.20 - 10:57
(0) Платформа то какая? 77?
   mistеr
 
18 - 28.10.20 - 11:04
(2) Я не понял, она за собой Питон тащит?
   arsik
 
19 - 28.10.20 - 11:06
А если это файл через браузер типа хрома скачать? Что в итоге будет?
   polosov
 
20 - 28.10.20 - 11:15
(18) Кто "она"?
   Кулибин
 
21 - 28.10.20 - 11:15
(13) ну, тогда так попробуй что ли ;-) ЗапуститьПриложение(""""+"C:\Program Files\WinRAR\WinRAR.exe"+""""+" x "+Путь+" *.* "+Сред(Путь,1,СтрДлина(Путь)-4)+"\"+"""");
   jamesgold
 
22 - 28.10.20 - 11:19
(17) 1С:Предприятие 8.2 (8.2.19.83)
   jamesgold
 
23 - 28.10.20 - 11:21
(15) Действительно, если сменить файлу расширение на zip и распаковать его, файл становится читаемым
   mistеr
 
24 - 28.10.20 - 11:21
(20) Библиотека по ссылке.
   jamesgold
 
25 - 28.10.20 - 11:22
(19) файл сразу в читаемом виде
   polosov
 
26 - 28.10.20 - 11:25
(24) Это просто код на 1С. Можно запихнуть его в общий модуль и пользоваться.
   arsik
 
27 - 28.10.20 - 11:32
(25) (22) А нафига через WinHttpRequest? В 1С есть встроенные методы работы с HTTP. Они тебе сразу норм вернут.
   mistеr
 
28 - 28.10.20 - 11:34
(26) Спасибо, взял на заметку.
   arsik
 
29 - 28.10.20 - 11:38
+ (27) Еще можно в заголовке запроса указать  
XMLHttp.SetRequestHeader("Accept-Encoding", "identity");

Тогда сервер будет отдавать чистые данные, без архивирования
   polosov
 
30 - 28.10.20 - 11:39
(28) Он очень удобный. Все интеграции пишу с его использованием. С минимальными изменениями под свои нужды.
 
 Рекламное место пустует
   jamesgold
 
31 - 28.10.20 - 11:45
(21) Распаковка прекрасна работает
   jamesgold
 
32 - 28.10.20 - 13:24
Всем спасибо, за ответы! Нормальное решение доступно только за стармани, Кулибин подсказал как обойтись с помощью костыля. На будущее после обновления платформы буду использовать http://catalog.mista.ru/public/487987/
   arsik
 
33 - 28.10.20 - 13:37
(32) Да уж. Нихера то ты не понял.
   jamesgold
 
34 - 28.10.20 - 14:07
(33) не работает
http://prntscr.com/v8kwae
   jamesgold
 
35 - 28.10.20 - 14:09
(27) Можно пример?
   arsik
 
36 - 28.10.20 - 14:19
(34) Значит сервер не обрабатывает этот заголовок и шлет тебе в gzip
(35) https://bit.ly/3muYzZ7 Стандартными средствами 1С тебе не нужно будет распаковывать из gzip. Платформа сама поймет что пришли сжатые данные. Распакует их и вернет тебе исходный файл.
   polosov
 
37 - 28.10.20 - 14:47
(36) "Стандартными средствами 1С тебе не нужно будет распаковывать из gzip"
Фантазии.
   Кулибин
 
38 - 28.10.20 - 14:54
(37) ;-)
   arsik
 
39 - 28.10.20 - 15:02
(37) Можем проверить.
   arsik
 
40 - 28.10.20 - 16:04
(37) Сорян. Реально. Платформа это не обрабатывает.
   arsik
 
41 - 28.10.20 - 16:16
Можно еще попробовать в запросе передать
XMLHttp.SetRequestHeader("Accept-Encoding", "deflate");
   Кулибин
 
42 - 29.10.20 - 04:34
(32) почему костыль? разберись, почему 7зэт у тебя не распаковывает, или всё же дело было в расширении? засунь его двоичкой в макет и будет работать вечно ;-) заодно попробуй на лету определить тип файла при чтении /не архив/архив/какой архив/ перед обработкой...
   Armando
 
43 - 29.10.20 - 10:03
(32) Зачем ждать обновления? Оно и на 8.2 работает. http://forum.infostart.ru/forum28/topic148149/message2451452/#message2451452
   Serginio1
 
44 - 29.10.20 - 17:02
   polosov
 
45 - 29.10.20 - 17:12
(44) Статья, как пример принципа ХХВП.


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