|
Как грамотно отправить pdf-файл через http-запрос? | ☑ | ||
---|---|---|---|---|
0
Обработка
27.09.22
✎
06:57
|
В компании есть некая система куда с 1С ЗУП заливаю пдф документы который хранится в РС в
реквизите типа ХранилищеЗначения. При отправке система возвращает адрес путь к базе примерно такой https://ххх.kz/ннн/580c85abb Если прогнать через Posman то нормально открывается файл из https://ххх.kz/ннн/580c85abb А с 1С оправленный не открывается хотя система ее записывает у себя и ответ успешно - 200. Вот ниже код: СтрокаНабора = НаборЗаписей[0]; ИмяВременногоФайла = КаталогВременныхФайлов() + ТипДокумента; ДвоичныйФайл = СтрокаНабора.Файл.Получить(); Если ДвоичныйФайл <> Неопределено Тогда ДвоичныйФайл.Записать(ИмяВременногоФайла+".pdf"); Иначе Сообщить("Файл для отправки не прикреплен!"); Возврат КонецЕсли; АдресСтраницы = "/ХХХХХХХ/pdf"; Хост = "YYYY.YYY.kz"; МойТокен = "******************"; Строка64 = Base64Строка(ДвоичныйФайл); // передадим данные на сервер Заголовки = Новый Соответствие(); Заголовки.Вставить("Content-Length", XMLСтрока(ДвоичныйФайл.Размер())); //Заголовки.Вставить("Content-Type", "application/pdf"); Заголовки.Вставить("Content-Type", "text/plain"); Заголовки.Вставить("Authorization", "Bearer "+ МойТокен); //Заголовки.Вставить("User-Agent", "PostmanRuntime/7.29.2"); Заголовки.Вставить("Accept-Encoding", "*/*"); Заголовки.Вставить("Accept", "gzip, deflate, br"); Заголовки.Вставить("Connection", "keep-alive"); ЗапросHTTP = Новый HTTPЗапрос(АдресСтраницы,Заголовки ); //ЗапросHTTP.УстановитьТелоИзДвоичныхДанных(ДанныеТела); // установили тело ЗапросHTTP.УстановитьТелоИзСтроки(Строка64); // установили тело // передадим данные на сервер Соединение = Новый HTTPСоединение(Хост,443,,,,,Новый ЗащищенноеСоединениеOpenSSL); ОтветHTTP = Соединение.ОтправитьДляОбработки(ЗапросHTTP); // финал //ОтветHTTP = Соединение.ВызватьHTTPМетод("POST",ЗапросHTTP); Сообщить(ОтветHTTP.ПолучитьТелоКакСтроку()); ЧЯНТД? |
|||
1
Обработка
27.09.22
✎
07:01
|
Ранее через поток организовал отправку файла просто двоичного файла.
Было все успешно. А вот base64 получается не корректно. Кто ранее решал такое? В чем моя ошибка? |
|||
2
icipher
27.09.22
✎
07:25
|
base64 вставляет переводы строки в итоговую строку. может в этом дело.
|
|||
3
Обработка
27.09.22
✎
07:42
|
Вот грамотно ответили мне так:
А еще подучи http протокол :) Ты передаешь хэадер gzip это значит что ты говоришь серверу что чувак, я ща все заархивирую и отправлю. А отправляешь не сжимая как есть. Данные тела у тебя не устанавливаются в комментарии зачем то ты временный файл создаешь когда у тебя уже двоичные данные есть и создаешь временный не по стандарту - он так сам нк удалится content-length устанавливать не надо его платформа посчитает. Это размер всего тела который получится а вот Content-type почему то закомментировал. тут надо смотреть чем кормится сервер может не критичино а может очень критично соединение в keep-alive надо переводить только если собираешься несколько запросов делать в рамках одного соединения это чтоб сервер держал сеанс. а так ты его тупо обманываешь потому что только один запрос делаешь В общем в этом коде неправильно все |
|||
4
Smit1C
27.09.22
✎
08:40
|
(3) а разве есть такой сайт где отвечают на твой вопрос, а не говорят какой ты тупой в первых 100 комментариях?))
|
|||
5
Смотрящий
27.09.22
✎
08:42
|
(4) Это фантастика. В (3) сто первый коммент ...
|
|||
6
Обработка
27.09.22
✎
08:44
|
(4) Группа в телеге...
В разных группах по разному. В некоторых группах админы флуд косят. В некоторых закрывают глаза. Кому будет полезно вот туда отправили https://github.com/vbondarevsky/Connector Похоже сам автор. За что ему спасибо! |
|||
7
Обработка
27.09.22
✎
11:54
|
Вот это заработало:
АдресСтраницы = "/хххххххх/pdf"; Хост = "ххххх.ххх.kz"; МойТокен = "****************"; Строка64 = Base64Строка(ДвоичныйФайл); Заголовки = Новый Соответствие(); Заголовки.Вставить("Content-Type", "text/plain"); Заголовки.Вставить("Authorization", "Bearer "+ МойТокен); Заголовки.Вставить("Accept-Encoding", "*/*"); ЗапросHTTP = Новый HTTPЗапрос(АдресСтраницы,Заголовки ); ЗапросHTTP.УстановитьТелоИзСтроки(Строка64); // установили тело Соединение = Новый HTTPСоединение(Хост,443,,,,,Новый ЗащищенноеСоединениеOpenSSL); ОтветHTTP = Соединение.ОтправитьДляОбработки(ЗапросHTTP); // финал Сообщить(ОтветHTTP.ПолучитьТелоКакСтроку()); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |