Передача файла через POST на сайт

1. AlexeyIsip 26 02.05.23 12:38 Сейчас в теме
Делаю интеграцию с сайтом.
В документации (https://docs.szamlazz.hu/#how-can-i-send-an-xml-in-the-given-requests) приведены 2 примера отправки:
Пример 1.
<ht ml>
<head><met a content="text/html; CHARSET=UTF-8"></head>
<body>
<fo rm action="https://www.szamlazz.hu/szamla/" method="post" enctype="multipart/form-data">
XML file: <input type="file" name="action-xmlagentxmlfile">


E-mail attachments if applies:

attached file 1. <input type="file" name="attachfile1">

attached file 2. <input type="file" name="attachfile2">

attached file 3. <input type="file" name="attachfile3">

attached file 4. <input type="file" name="attachfile4">

attached file 5. <input type="file" name="attachfile5">


<input type="submit" name="generate" value="Issue invoice">
</form>
</body>
</html>

Пример 2.
curl -v -F action-xmlagentxmlfile=@agent.xml -c ./cookies.txt -o response.pdf https://www.szamlazz.hu/szamla/


//\\////\\////\\////\\////\\////\\////\\////\\////\\////\\//­//\\////\\////\\////\\////\\////\\////\\////\\////\\////\\//­//\\////\\//


Пытаюсь повторить из 1с, но ничего не получается..

Функция ТестоваяXml()
Результат="<?xml version=""1.0"" encoding=""UTF-8""?>
|<xm lszamla xmlns=""http://www.szamlazz.hu/xmlszamla"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">
| <beallitasok>
| <szamlaagentkulcs>y32hs3h6rtgv2fd6a4beyj29r6adnamhgsiyspskk9­</szamlaagentkulcs>
| <eszamla>true</eszamla>
| <szamlaLetoltes>false</szamlaLetoltes>
| <valaszVerzio>1</valaszVerzio>
| </beallitasok>
| <fejlec>
| <keltDatum>2023-05-01</keltDatum>
| <teljesitesDatum>2023-05-02</teljesitesDatum>
| <fizetesiHataridoDatum>2023-05-03</fizetesiHataridoDatum>
| <fizmod>credit_card</fizmod>
| <penznem>Ft</penznem>
| <szamlaNyelve>en</szamlaNyelve>
| <vegszamla>false</vegszamla>
| <elolegSzamlaszam>N1</elolegSzamlaszam>
| </fejlec>
| <elado/>
| <vevo>
| <nev>Nev1</nev>
| <irsz>111111</irsz>
| <telepules>Praga</telepules>
| <cim>PragaAdress</cim>
| </vevo>
| <tetelek>
| <tetel>
| <megnevezes>Goods2</megnevezes>
| <mennyiseg>1</mennyiseg>
| <mennyisegiEgyseg>pieces</mennyisegiEgyseg>
| <nettoEgysegar>100</nettoEgysegar>
| <afakulcs>27</afakulcs>
| <nettoErtek>0</nettoErtek>
| <afaErtek>0</afaErtek>
|
0</bruttoErtek>
| <megjegyzes/>
| <tetelFokonyv>
| <gazdasagiEsem/>
| <gazdasagiEsemAfa/>
| <arbevetelFokonyviSzam/>
| <afaFokonyviSzam/>
| <elszDatumTol>2023-01-01</elszDatumTol>
| <elszDatumIg>2023-01-01</elszDatumIg>
| </tetelFokonyv>
| </tetel>
| <tetel>
| <megnevezes>Goods1</megnevezes>
| <mennyiseg>1</mennyiseg>
| <mennyisegiEgyseg>pieces</mennyisegiEgyseg>
| <nettoEgysegar>100</nettoEgysegar>
| <afakulcs>27</afakulcs>
| <nettoErtek>0</nettoErtek>
| <afaErtek>0</afaErtek>
|
0</bruttoErtek>
| <megjegyzes/>
| <tetelFokonyv>
| <gazdasagiEsem/>
| <gazdasagiEsemAfa/>
| <arbevetelFokonyviSzam/>
| <afaFokonyviSzam/>
| <elszDatumTol>2023-01-01</elszDatumTol>
| <elszDatumIg>2023-01-01</elszDatumIg>
| </tetelFokonyv>
| </tetel>
| </tetelek>
|</xmlszamla>";
Возврат Результат;
КонецФункции

Функция СформироватьСтрокуBase64изXML(СтрXML)
	Поток = Новый ПотокВПамяти();
	ЗаписьТекста = Новый ЗаписьТекста(Поток, КодировкаТекста.UTF8);    
	
	ЗаписьТекста.Записать(СтрXML);
	ЗаписьТекста.Закрыть();
	
	ДД = Поток.ЗакрытьИПолучитьДвоичныеДанные();

	СтрокаBase64 = Base64Строка(ДД); 
	Возврат СтрокаBase64;
КонецФункции

&НаСервере
Процедура ОтправитьXMLНаСервере() 
	АдресСтраницы = "/szamla/";
    Хост = "www.szamlazz.hu"; 
	Порт = 443;
	Логин = "";
	Пароль = ""; 
	
	Ssl = Новый ЗащищенноеСоединениеOpenSSL();
	Прокси = Новый ИнтернетПрокси(Ложь);
	Соединение = Новый HTTPСоединение(Хост, Порт, Логин, Пароль, Прокси,,Ssl);


	XML=ТестоваяXml();
	Строка64=СформироватьСтрокуBase64изXML(XML);
    
    // подготовим файл с данными для отправки
    имяФайлаОтправки = ПолучитьимяВременногоФайла("txt");
    boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
     
    ЗаписьТекста = Новый ЗаписьТекста(имяФайлаОтправки, КодировкаТекста.UTF8, Символы.ПС, Ложь);
     
    // ++ поле формы html
    ЗаписьТекста.ЗаписатьСтроку("--" + boundary);
    ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name='action-xmlagentxmlfile'" + Символы.ПС);
    ЗаписьТекста.ЗаписатьСтроку("");
    ЗаписьТекста.ЗаписатьСтроку(Строка64);
    // -- поле формы html
    
    
    // закроем разделитель
    ЗаписьТекста.ЗаписатьСтроку("--" + boundary + "--");
    ЗаписьТекста.Закрыть();
    
    // определим размер файла
    ФайлОтправки = Новый Файл(имяФайлаОтправки);
    РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
    
    // передадим данные на сервер 
    Заголовки = Новый Соответствие();
    Заголовки.Вставить("Content-Type", "multipart/form-data, boundary=" + boundary);
    Заголовки.Вставить("Content-Lenght", РазмерФайлаОтправки); 
	Заголовки.Вставить("content","text/html; CHARSET=UTF-8");

    
    имяВыходногоФайла = ПолучитьИмяВременногоФайла("txt");
    
    ЗапросHTTP = Новый HTTPЗапрос(АдресСтраницы, Заголовки);
    ЗапросHTTP.УстановитьИмяФайлаТела(имяФайлаОтправки);
	


    Ответ = Соединение.ОтправитьДляОбработки(ЗапросHTTP);    
	Данные = Ответ.ПолучитьТелоКакСтроку();
	Сообщить(Данные);

КонецПроцедуры
Показать


Буду благодарен, если кто-нибудь поможет...
По теме из базы знаний
Найденные решения
5. Sashares 34 02.05.23 14:29 Сейчас в теме
(4)
В хроме попытался посмотреть

Поставьте Fiddler - в нем нужно включить захват https - тогда будет видно что отправляется при рабочем примере и что при отправке из 1С. Найти отличия будет не сложно.
Прикрепленные файлы:
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Sashares 34 02.05.23 13:59 Сейчас в теме
(1)
Заголовки.Вставить("Content-Lenght", РазмерФайлаОтправки);

Это лишнее, платформа сама добавляет этот заголовок.
3. AlexeyIsip 26 02.05.23 14:02 Сейчас в теме
Делаю интеграцию с сайтом.
В документации (https://docs.szamlazz.hu/#how-can-i-send-an-xml-in-the-given-requests) приведены 2 примера отправки:
Пример 1.
<ht ml>
<head><met a content="text/html; CHARSET=UTF-8"></head>
<body>
<fo rm action="https://www.szamlazz.hu/szamla/" method="post" enctype="multipart/form-data">
XML file: <input type="file" name="action-xmlagentxmlfile">


E-mail attachments if applies:

attached file 1. <input type="file" name="attachfile1">

attached file 2. <input type="file" name="attachfile2">

attached file 3. <input type="file" name="attachfile3">

attached file 4. <input type="file" name="attachfile4">

attached file 5. <input type="file" name="attachfile5">


<input type="submit" name="generate" value="Issue invoice">
</form>
</body>
</html>

Пример 2.
curl -v -F action-xmlagentxmlfile=@agent.xml -c ./cookies.txt -o response.pdf https://www.szamlazz.hu/szamla/


//\\////\\////\\////\\////\\////\\////\\////\\////\\////\\//­//\\////\\////\\////\\////\\////\\////\\////\\////\\////\\//­//\\////\\//


Пытаюсь повторить из 1с, но ничего не получается..

Функция ТестоваяXml()
Результат="<?xml version=""1.0"" encoding=""UTF-8""?>
|<xm lszamla xmlns=""http://www.szamlazz.hu/xmlszamla"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">
| <beallitasok>
| <szamlaagentkulcs>y32hs3h6rtgv2fd6a4beyj29r6adnamhgsiyspskk9­</szamlaagentkulcs>
| <eszamla>true</eszamla>
| <szamlaLetoltes>false</szamlaLetoltes>
| <valaszVerzio>1</valaszVerzio>
| </beallitasok>
| <fejlec>
| <keltDatum>2023-05-01</keltDatum>
| <teljesitesDatum>2023-05-02</teljesitesDatum>
| <fizetesiHataridoDatum>2023-05-03</fizetesiHataridoDatum>
| <fizmod>credit_card</fizmod>
| <penznem>Ft</penznem>
| <szamlaNyelve>en</szamlaNyelve>
| <vegszamla>false</vegszamla>
| <elolegSzamlaszam>N1</elolegSzamlaszam>
| </fejlec>
| <elado/>
| <vevo>
| <nev>Nev1</nev>
| <irsz>111111</irsz>
| <telepules>Praga</telepules>
| <cim>PragaAdress</cim>
| </vevo>
| <tetelek>
| <tetel>
| <megnevezes>Goods2</megnevezes>
| <mennyiseg>1</mennyiseg>
| <mennyisegiEgyseg>pieces</mennyisegiEgyseg>
| <nettoEgysegar>100</nettoEgysegar>
| <afakulcs>27</afakulcs>
| <nettoErtek>0</nettoErtek>
| <afaErtek>0</afaErtek>
|
0</bruttoErtek>
| <megjegyzes/>
| <tetelFokonyv>
| <gazdasagiEsem/>
| <gazdasagiEsemAfa/>
| <arbevetelFokonyviSzam/>
| <afaFokonyviSzam/>
| <elszDatumTol>2023-01-01</elszDatumTol>
| <elszDatumIg>2023-01-01</elszDatumIg>
| </tetelFokonyv>
| </tetel>
| <tetel>
| <megnevezes>Goods1</megnevezes>
| <mennyiseg>1</mennyiseg>
| <mennyisegiEgyseg>pieces</mennyisegiEgyseg>
| <nettoEgysegar>100</nettoEgysegar>
| <afakulcs>27</afakulcs>
| <nettoErtek>0</nettoErtek>
| <afaErtek>0</afaErtek>
|
0</bruttoErtek>
| <megjegyzes/>
| <tetelFokonyv>
| <gazdasagiEsem/>
| <gazdasagiEsemAfa/>
| <arbevetelFokonyviSzam/>
| <afaFokonyviSzam/>
| <elszDatumTol>2023-01-01</elszDatumTol>
| <elszDatumIg>2023-01-01</elszDatumIg>
| </tetelFokonyv>
| </tetel>
| </tetelek>
|</xmlszamla>";
Возврат Результат;
КонецФункции

Функция СформироватьСтрокуBase64изXML(СтрXML)
Поток = Новый ПотокВПамяти();
ЗаписьТекста = Новый ЗаписьТекста(Поток, КодировкаТекста.UTF8);

ЗаписьТекста.Записать(СтрXML);
ЗаписьТекста.Закрыть();

ДД = Поток.ЗакрытьИПолучитьДвоичныеДанные();

СтрокаBase64 = Base64Строка(ДД);
Возврат СтрокаBase64;
КонецФункции

&НаСервере
Процедура ОтправитьXMLНаСервере()
АдресСтраницы = "/szamla/";
Хост = "www.szamlazz.hu";
Порт = 443;
Логин = "";
Пароль = "";

Ssl = Новый ЗащищенноеСоединениеOpenSSL();
Прокси = Новый ИнтернетПрокси(Ложь);
Соединение = Новый HTTPСоединение(Хост, Порт, Логин, Пароль, Прокси,,Ssl);


XML=ТестоваяXml();
Строка64=СформироватьСтрокуBase64изXML(XML);

// подготовим файл с данными для отправки
имяФайлаОтправки = ПолучитьимяВременногоФайла("txt");
boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");

ЗаписьТекста = Новый ЗаписьТекста(имяФайлаОтправки, КодировкаТекста.UTF8, Символы.ПС, Ложь);

// ++ поле формы html
ЗаписьТекста.ЗаписатьСтроку("--" + boundary);
ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name='action-xmlagentxmlfile'" + Символы.ПС);
ЗаписьТекста.ЗаписатьСтроку("");
ЗаписьТекста.ЗаписатьСтроку(Строка64);
// -- поле формы html


// закроем разделитель
ЗаписьТекста.ЗаписатьСтроку("--" + boundary + "--");
ЗаписьТекста.Закрыть();

// определим размер файла
ФайлОтправки = Новый Файл(имяФайлаОтправки);
РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());

// передадим данные на сервер
Заголовки = Новый Соответствие();
Заголовки.Вставить("Content-Type", "multipart/form-data, boundary=" + boundary);
Заголовки.Вставить("Content-Lenght", РазмерФайлаОтправки);
Заголовки.Вставить("content","text/html; CHARSET=UTF-8");


имяВыходногоФайла = ПолучитьИмяВременногоФайла("txt");

ЗапросHTTP = Новый HTTPЗапрос(АдресСтраницы, Заголовки);
ЗапросHTTP.УстановитьИмяФайлаТела(имяФайлаОтправки);



Ответ = Соединение.ОтправитьДляОбработки(ЗапросHTTP);
Данные = Ответ.ПолучитьТелоКакСтроку();
Сообщить(Данные);

КонецПроцедуры


Буду благодарен, если кто-нибудь поможет...
4. AlexeyIsip 26 02.05.23 14:11 Сейчас в теме
убрал, но не помогло.

В хроме попытался посмотреть, что происходит в рабочем примере на html.
Результаты прикрепил
(отправлял только 1 файл с xml)
Прикрепленные файлы:
5. Sashares 34 02.05.23 14:29 Сейчас в теме
(4)
В хроме попытался посмотреть

Поставьте Fiddler - в нем нужно включить захват https - тогда будет видно что отправляется при рабочем примере и что при отправке из 1С. Найти отличия будет не сложно.
Прикрепленные файлы:
6. AlexeyIsip 26 02.05.23 15:31 Сейчас в теме
Спасибо огромное. Тут реально весь запрос виден ). Оказалось не нужно кодировать в Base64 и пару лишних переводов каретки было.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот