Доброго времени суток, подскажите а то уже всю головку сломал, перепробовал разные внешние комоненты в том числе WinHttp.WinHttpRequest.5.1, ничего не получается, такое ощущение что формат данных для передачи не правильные, сервер ожидает UTF-8. Тот же самый файл, тот же самый запрос отправляется POSTMAN и Python'ом без проблем.
Есть задача, отправить файл по API на сервер POST Запросом.
Выполняю:
The term CRLF, in this set of documents, refers to the sequence of octets corresponding to the two US-ASCII characters CR (decimal value 13) and LF (decimal value 10)
Т.е. должен быть 13+10.
Вообще когда я файлами мультипарт собирал - получалось, что ему достаточно ПС (10) - хоть и отклоняется от RFC - но проходило.
Ибо я использовал обычную ЗаписьТекста, которая по умолчанию в конце строки ставит только ПС.
ЗаписьТекста = Новый ЗаписьТекста(имяФайлаСПараметрами, "CESU-8"); //utf-8 без bom
// параметр "photo"
ИмяФайла = Строка(Новый УникальныйИдентификатор()) + "." + РасширениеФайлаКартинки;
ЗаписьТекста.ЗаписатьСтроку("--"+boundary);
ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""photo""; filename=""" + ИмяФайла + """");
ЗаписьТекста.ЗаписатьСтроку("Content-Type: image/"+РасширениеФайлаКартинки);
ЗаписьТекста.ЗаписатьСтроку("");
// дальше присоединялись двоичные данные картинки
подскажите а то уже всю головку сломал, перепробовал разные внешние комоненты в том числе WinHttp.WinHttpRequest.5.1, ничего не получается, такое ощущение что формат данных для передачи не правильные, сервер ожидает UTF-8. Тот же самый файл, тот же самый запрос отправляется POSTMAN и Python'ом без проблем.
Чтобы не гадать, что не так, надо смотреть в чем отличия при правильной отправке и при не правильной.
Это удобно и наглядно можно увидеть с помощью Fiddler'а.
(3)Вот скрины запроса который уходит, единственное отличие которое нашёл это отличие кодировки и соответственно размера файла((( Поэтому и решил что кодировка не правильна
(9) Обычно, при наличии правильного и HTTP запроса в фидлере не составляет сложности привести к нужному виду НTTP запрос в 1С. Сравнить заголовки, сравнить тело, что отличается - исправить.
По поводу кодировки при передаче файла - с таким не сталкивался, может там просто файлы разные?
Приложите RAW правильного запроса и файл для отправки для примера.
Завтра будет время, могу посмотреть.
(9) Это фидлер не понимает что Вы шлете. В неверном запросе лишний "Content-Type: application/pdf; charset=utf-8", которого вообще нет в рабочем скрине. И из-за неверного РазделительСтрок = Символ(10)+Символ(13); (нужен наоборот 13+10) у фидлера видимо крыша едет.
(8) На АПИ телеграма такое не проходило из-за того, что Новый ЗаписьТекста(ИмяФайла1); устананавливал BOM - ненужные байты в начале. Их нужно либо потом убирать, либо как вариант Новый ЗаписьТекста(имяФайлаСПараметрами, "CESU-8"); - суррогат УТФ8 без БОМ.
CESU-8 A Unicode code point from the Basic Multilingual Plane (BMP), i.e. a code point in the range U+0000 to U+FFFF, is encoded in the same way as in UTF-8
А эска дальше FFFF вообще не работает, поэтому в контексте 1С можно сказать, что UTF-8 и CESU-8 - это одинаковые кодировки.
(2)
(14)Аааа так вот что это было, я как то пытался файл прочитать ADODB.Stream и получал именно "EF BB BF", подумал сначала хмм.. что то короткий файл, а оказывается это ВОМ
(11)Решение было на столько близко, что даже в глаза не попадало, РазделительСтрок был не по правилам собран, мне подсказал https://infostart.ru/profile/769742/, исправил его и все пошло, уж не знаю с чем ещё дальше столкнусь, но все ответы на мой вопрос дали ответы на многие тонкости, спасибо большое за активность. Если честно первый раз в жизни на форумах задаю вопросы, только отвечал, никогда не верил в этой, но благодаря всем вам у меня поменялось мнение кардинально....
Дальше буду мучать ЧестныйЗнак и Диадок, там уже подписи, шифрования всякие)Но там вроде половина уже сделана, т.е. авторизации, получения документов и т.д., теперь на очереди Отправка и тот же Мультипарт, но думаю (надеюсь), что теперь пойдут дела в гору))
На просторах интернета мало описания, как получится, постараюсь выложить примеры, для таких как я на будущее)) попытаюсь изложить все замечания и предложения что были предложены мне тут...
Ещё раз огромное спасибо....
(1)Вообще странное решение с этим РазделителемСтрок, и сам он неверный (нужно наоборот Символ(13)+Символ(10)) и можно вообще без него обойтись - эска сама по умолчанию все нормально перенесет.
(8)
(8)С этого мы начинали:) Не робит, у нас 3 API, Диадок, Честный знак и этот местный сервак) никуда не получилось) уже месяц бадаемся, силы на исходе
The term CRLF, in this set of documents, refers to the sequence of octets corresponding to the two US-ASCII characters CR (decimal value 13) and LF (decimal value 10)
Т.е. должен быть 13+10.
Вообще когда я файлами мультипарт собирал - получалось, что ему достаточно ПС (10) - хоть и отклоняется от RFC - но проходило.
Ибо я использовал обычную ЗаписьТекста, которая по умолчанию в конце строки ставит только ПС.
ЗаписьТекста = Новый ЗаписьТекста(имяФайлаСПараметрами, "CESU-8"); //utf-8 без bom
// параметр "photo"
ИмяФайла = Строка(Новый УникальныйИдентификатор()) + "." + РасширениеФайлаКартинки;
ЗаписьТекста.ЗаписатьСтроку("--"+boundary);
ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""photo""; filename=""" + ИмяФайла + """");
ЗаписьТекста.ЗаписатьСтроку("Content-Type: image/"+РасширениеФайлаКартинки);
ЗаписьТекста.ЗаписатьСтроку("");
// дальше присоединялись двоичные данные картинки
(12) Хотя нет, сейчас посмотрел - по умолчанию ЗаписьТекста.ЗаписатьСтроку везде в конце строки пишет байты 0D0A , т.е. символ.ВК+символ.ПС, они же Символ(13) + Символ(10). Это как раз то, что требует RFC2045 при формировании мультипарта.
Блииин дружище..... Спасибо огроооомное!!!!! Я получил 200, чуть со стула не упал, радости полные штаны!!!!)))) Разделить не правильный был, как ты и сказал)) стоило только поменять местами 10 и 13 и все пошло) а ещё убрал явное представление формата файла "ЗаписьДанных.ЗаписатьСтроку("Content-Type: application/pdf; charset=utf-8" + РазделительСтрок);" заменил на "", судя по всему все формируется автоматически.....
Примного благодарен.. Честно...
Это был самый простой, местный, но думаю с остальными уже по накатанной пойдет, там ЧестныйЗнак и Диадок, думаю в общаг потом выложу куда нить, а то весь интернет облазил, как будто затирают все это....