|
чтение - декодирование ответа 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); ВесьФайлОднойСтрокой = Файл.Прочитать(); Файл.Закрыть(); сообщить(ВесьФайлОднойСтрокой); аллилуя :) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |