Имя: Пароль:
1C
 
работа с HTTPСоединение и ОтправитьДляОбработки на 1с.
,
0 police
 
20.09.16
13:20
Ниже написал код для отправки xml файла на сервер но код не работает.

Попытка
        Запись = Новый ЗаписьXML();
        Запись.ОткрытьФайл("D:\tmp\1.xml");    
    Исключение
        Сообщить("Ошибка при создание XML файла! " + Символы.ПС + ОписаниеОшибки());
    КонецПопытки;
    
    Запись.ЗаписатьОбъявлениеXML();
    Запись.ЗаписатьНачалоЭлемента("root");
    //Запись.ЗаписатьНачалоЭлемента("columns");  
            
        Запись.ЗаписатьНачалоЭлемента("colum");
        Запись.ЗаписатьАтрибут("Name","Name");
        Запись.ЗаписатьАтрибут("Type","imya");
        Запись.ЗаписатьКонецЭлемента();  // colum      
           
    //Запись.ЗаписатьКонецЭлемента();  // columns
    Запись.ЗаписатьКонецЭлемента();  // root
    Запись.Закрыть();
    
    имяФайла = "D:\tmp\1.xml";
    ФайлОтправки= Новый Файл(имяФайла);
    РазмерФайлОтправки=XMLСтрока(ФайлОтправки.Размер());
    
    Заголовок=Новый Соответствие();
    Заголовок.Вставить("Content-Type", "text/html;charset=utf-8");
    Заголовок.Вставить("Content-Length",РазмерФайлОтправки);
    
    имяВыходнойФайла=ПолучитьИмяВременногоФайла("xml");
    
    соединение=Новый HTTPСоединение("http://localhost";);
    соединение.ОтправитьДляОбработки(имяФайла,"\chb\index.php",имяВыходнойФайла,Заголовок);
1 Mauser
 
20.09.16
13:29
(0) Какая прелесть, как ты этого добился?
2 Kabz
 
20.09.16
13:36
у тебя поднят   сайт на веб сервер и сайт на локальном компе?
3 Kabz
 
20.09.16
13:37
то есть веб сервер поднят на локальном компе ?
4 police
 
20.09.16
13:49
(3) yes
5 Nuobu
 
20.09.16
13:50
(4) В каком месте не работает?
6 Mauser
 
20.09.16
13:55
(5) Не порть интригу, мы должны догадаться
7 oleg_km
 
20.09.16
14:11
Мда
8 AceVi
 
20.09.16
14:17
(6) 100 на красное!
9 AceVi
 
20.09.16
14:25
(0) ОтправитьДляОбработки - а ты хелп читал? там в 1 параметре ниразу не имя файла.
10 Mauser
 
20.09.16
14:33
(9) Еще один СП не читает
11 Mauser
 
20.09.16
14:34
Вариант синтаксиса: По файлу-источнику и адресу ресурса

Синтаксис:
ОтправитьДляОбработки(<Источник>, <АдресРесурса>, <ИмяВыходногоФайла>, <Заголовки>)

Параметры:
<Источник> (обязательный)
Тип: Строка.
Адрес файла-источника.
12 gitotuta
 
20.09.16
14:35
Адрес - это адрес хранилища , а не имя файла
13 gitotuta
 
20.09.16
14:36
там даже пример есть

// инициализируем объект для записи XML

ИмяФайлаЗапроса = ПолучитьИмяВременногоФайла();
ОбъектЗапись = Новый ЗаписьXML;
ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("windows-1251", , Ложь);
ОбъектЗапись.ОткрытьФайл(ИмяФайлаЗапроса, ПараметрыЗаписиXML);
ОбъектЗапись.ЗаписатьОбъявлениеXML();

// выводим корневой элемент Request

ОбъектЗапись.ЗаписатьНачалоЭлемента("Request");

// выводим элемент ClientInfo

ОбъектЗапись.ЗаписатьНачалоЭлемента("ClientInfo");
ОбъектЗапись.ЗаписатьАтрибут("email", АдресОтправителя);
ОбъектЗапись.ЗаписатьКонецЭлемента();

Если ИмяФайлаСертификата <> Неопределено Тогда

    // кодируем в Base64 сертификат

    ДвДанные.Прочитать(ИмяФайлаСертификата);
    ФайлСертификатаBase64 = ДвДанные.ПолучитьСтрокуBase64();
    
    // выводим элемент Certificate

    ОбъектЗапись.ЗаписатьНачалоЭлемента("Certificate");
    ОбъектЗапись.ЗаписатьТекст(ФайлСертификатаBase64);
    ОбъектЗапись.ЗаписатьКонецЭлемента();
    
КонецЕсли;

Если ИмяФайлаЗашифрованногоКонтейнера <> Неопределено Тогда

    // кодируем в Base64 зашифрованный контейнер

    ДвДанные.Прочитать(ИмяФайлаЗашифрованногоКонтейнера);
    ФайлЗашифрованногоКонтейнераBase64 = ДвДанные.ПолучитьСтрокуBase64();
    
    // выводим элемент Data

    ОбъектЗапись.ЗаписатьНачалоЭлемента("Data");
    ОбъектЗапись.ЗаписатьТекст(ФайлЗашифрованногоКонтейнераBase64);
    ОбъектЗапись.ЗаписатьКонецЭлемента();
    
КонецЕсли;

// записываем конец для корневого элемента

ОбъектЗапись.ЗаписатьКонецЭлемента();

ОбъектЗапись.Закрыть();

АдресСервераОнлайнПроверки = "onlinefc.taxcom.ru";
РесурсНаСервере = "/online_fc/online_fc.dll" + ?(ПолучитьСертификат, "?IncludeCertificate", "");

// устанавливаем соединение с сервером

Попытка
    Соединение = Новый HTTPСоединение(АдресСервераОнлайнПроверки, , , , Прокси);
Исключение
    Сообщить("Не удалось установить соединение с сервером онлайн-проверки:"
        + Символы.ПС + ИнформацияОбОшибке().Описание, СтатусСообщения.Важное);
    Возврат;
КонецПопытки;

// посылаем запрос

Попытка
    HTTPЗапрос = Новый HTTPЗапрос(РесурсНаСервере);
    HTTPЗапрос.УстановитьИмяФайлаТела(ИмяФайлаЗапроса);
    Результат  = Соединение.ОтправитьДляОбработки(HTTPЗапрос);
    Соединение = Неопределено;
    Если Результат.КодСостояния > 299 Тогда
       Сообщить("Код состояния " + Результат.КодСостояния + ". Проверка не выполнена");
    КонецЕсли;
Исключение
    Сообщить(ИнформацияОбОшибке().Описание, СтатусСообщения.Важное);
КонецПопытки;

14 Nuobu
 
20.09.16
14:36
(11) Я чего-то не понимаю, или у меня другой СП?
15 Nuobu
 
20.09.16
14:37
(14) HTTPСоединение.ОтправитьДляОбработки (HTTPConnection.Post)
HTTPСоединение (HTTPConnection)
ОтправитьДляОбработки (Post)
Синтаксис:

ОтправитьДляОбработки(<HTTPЗапрос>, <ИмяВыходногоФайла>)
Параметры:

<HTTPЗапрос> (обязательный)

Тип: HTTPЗапрос.
HTTP-запрос.
<ИмяВыходногоФайла> (необязательный)

Тип: Строка.
Имя выходного файла, в который записываются полученные с сервера данные.
Если не указан или содержит пустую строку, то тело ответа может быть получено из объекта HTTPОтвет.
Возвращаемое значение:

Тип: HTTPОтвет.

Описание:

Отправляет данные на указанный адрес для обработки при помощи HTTP-запроса POST.

Доступность:

Тонкий клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
Пример:

// инициализируем объект для записи XML
ИмяФайлаЗапроса = ПолучитьИмяВременногоФайла();
ОбъектЗапись = Новый ЗаписьXML;
ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("windows-1251", , Ложь);
ОбъектЗапись.ОткрытьФайл(ИмяФайлаЗапроса, ПараметрыЗаписиXML);
ОбъектЗапись.ЗаписатьОбъявлениеXML();

// выводим корневой элемент Request
ОбъектЗапись.ЗаписатьНачалоЭлемента("Request");

// выводим элемент ClientInfo
ОбъектЗапись.ЗаписатьНачалоЭлемента("ClientInfo");
ОбъектЗапись.ЗаписатьАтрибут("email", АдресОтправителя);
ОбъектЗапись.ЗаписатьКонецЭлемента();

Если ИмяФайлаСертификата <> Неопределено Тогда

    // кодируем в Base64 сертификат
    ДвДанные.Прочитать(ИмяФайлаСертификата);
    ФайлСертификатаBase64 = ДвДанные.ПолучитьСтрокуBase64();
    
    // выводим элемент Certificate
    ОбъектЗапись.ЗаписатьНачалоЭлемента("Certificate");
    ОбъектЗапись.ЗаписатьТекст(ФайлСертификатаBase64);
    ОбъектЗапись.ЗаписатьКонецЭлемента();
    
КонецЕсли;

Если ИмяФайлаЗашифрованногоКонтейнера <> Неопределено Тогда

    // кодируем в Base64 зашифрованный контейнер
    ДвДанные.Прочитать(ИмяФайлаЗашифрованногоКонтейнера);
    ФайлЗашифрованногоКонтейнераBase64 = ДвДанные.ПолучитьСтрокуBase64();
    
    // выводим элемент Data
    ОбъектЗапись.ЗаписатьНачалоЭлемента("Data");
    ОбъектЗапись.ЗаписатьТекст(ФайлЗашифрованногоКонтейнераBase64);
    ОбъектЗапись.ЗаписатьКонецЭлемента();
    
КонецЕсли;

// записываем конец для корневого элемента
ОбъектЗапись.ЗаписатьКонецЭлемента();

ОбъектЗапись.Закрыть();

АдресСервераОнлайнПроверки = "onlinefc.taxcom.ru";
РесурсНаСервере = "/online_fc/online_fc.dll" + ?(ПолучитьСертификат, "?IncludeCertificate", "");

// устанавливаем соединение с сервером
Попытка
    Соединение = Новый HTTPСоединение(АдресСервераОнлайнПроверки, , , , Прокси);
Исключение
    Сообщить("Не удалось установить соединение с сервером онлайн-проверки:"
        + Символы.ПС + ИнформацияОбОшибке().Описание, СтатусСообщения.Важное);
    Возврат;
КонецПопытки;

// посылаем запрос
Попытка
    HTTPЗапрос = Новый HTTPЗапрос(РесурсНаСервере);
    HTTPЗапрос.УстановитьИмяФайлаТела(ИмяФайлаЗапроса);
    Результат  = Соединение.ОтправитьДляОбработки(Запрос);
    Соединение = Неопределено;
    Если Результат.КодСостояния > 299 Тогда
       Сообщить("Код состояния " + Результат.КодСостояния + ". Проверка не выполнена");
    КонецЕсли;
Исключение
    Сообщить(ИнформацияОбОшибке().Описание, СтатусСообщения.Важное);
КонецПопытки;


--------------------------------------------------------------------------------

     Методическая информация
16 Mauser
 
20.09.16
14:38
(13) Тот же СП

Пример:

// инициализируем объект для записи XML
ИмяФайлаЗапроса = ПолучитьИмяВременногоФайла();
ОбъектЗапись = Новый ЗаписьXML;
ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("windows-1251", , Ложь);
ОбъектЗапись.ОткрытьФайл(ИмяФайлаЗапроса, ПараметрыЗаписиXML);
ОбъектЗапись.ЗаписатьОбъявлениеXML();

// выводим корневой элемент Request
ОбъектЗапись.ЗаписатьНачалоЭлемента("Request");

// выводим элемент ClientInfo
ОбъектЗапись.ЗаписатьНачалоЭлемента("ClientInfo");
ОбъектЗапись.ЗаписатьАтрибут("email", АдресОтправителя);
ОбъектЗапись.ЗаписатьКонецЭлемента();

Если ИмяФайлаСертификата <> Неопределено Тогда

    // кодируем в Base64 сертификат
    ДвДанные.Прочитать(ИмяФайлаСертификата);
    ФайлСертификатаBase64 = ДвДанные.ПолучитьСтрокуBase64();
    
    // выводим элемент Certificate
    ОбъектЗапись.ЗаписатьНачалоЭлемента("Certificate");
    ОбъектЗапись.ЗаписатьТекст(ФайлСертификатаBase64);
    ОбъектЗапись.ЗаписатьКонецЭлемента();
    
КонецЕсли;

Если ИмяФайлаЗашифрованногоКонтейнера <> Неопределено Тогда

    // кодируем в Base64 зашифрованный контейнер
    ДвДанные.Прочитать(ИмяФайлаЗашифрованногоКонтейнера);
    ФайлЗашифрованногоКонтейнераBase64 = ДвДанные.ПолучитьСтрокуBase64();
    
    // выводим элемент Data
    ОбъектЗапись.ЗаписатьНачалоЭлемента("Data");
    ОбъектЗапись.ЗаписатьТекст(ФайлЗашифрованногоКонтейнераBase64);
    ОбъектЗапись.ЗаписатьКонецЭлемента();
    
КонецЕсли;

// записываем конец для корневого элемента
ОбъектЗапись.ЗаписатьКонецЭлемента();

ОбъектЗапись.Закрыть();

АдресСервераОнлайнПроверки = "onlinefc.taxcom.ru";
РесурсНаСервере = "/online_fc/online_fc.dll" + ?(ПолучитьСертификат, "?IncludeCertificate", "");

// устанавливаем соединение с сервером
Попытка
    Соединение = Новый HTTPСоединение(АдресСервераОнлайнПроверки, , , , Прокси);
Исключение
    Сообщить("Не удалось установить соединение с сервером онлайн-проверки:"
        + Символы.ПС + ИнформацияОбОшибке().Описание, СтатусСообщения.Важное);
    Возврат;
КонецПопытки;

// посылаем запрос
ФайлРезультата = ПолучитьИмяВременногоФайла();
Попытка
    Соединение.ОтправитьДляОбработки(ИмяФайлаЗапроса, РесурсНаСервере, ФайлРезультата);
    Соединение = Неопределено;
Исключение
    Сообщить(ИнформацияОбОшибке().Описание, СтатусСообщения.Важное);
КонецПопытки;
17 Mauser
 
20.09.16
14:38
1С:Предприятие 8.2 (8.2.19.130) =)
18 Nuobu
 
20.09.16
14:40
(17) 8.3.6.2524
19 AceVi
 
20.09.16
15:22
Походу мы своей телепатией пробили голову ТС насквозь) Аккуратней надо, товарищи.
20 police
 
21.09.16
19:23
(15) Cпасибо
21 ramir
 
22.09.16
08:50
Для отправки файлов в http используется https://ru.wikipedia.org/wiki/Multipart/form-data

ОтправитьДляОбработки - хоть из файла, хоть с помощью УстановитьТелоИзСтроки задает только ТЕЛО запроса. В вики оно начинается здесь https://yadi.sk/i/8DZH5zeMvWut3.А тело должно быть оформлено как написано в вики, плюс заголовок для boundary. Если содержимое файла хочешь не в виде двоичных данных, а в виде base64, надо добавить строку:

Content-Transfer-Encoding: base64

После заголовков файла, в вики вот такие, например:

Content-Disposition: form-data; name="AttachedFile1"; filename="horror-photo-1.jpg"
Content-Type: image/jpeg

Если у тебя принимающий скрипт свой, то намного проще получить тело пост запроса в нем, а не пытаться отправить и получить файл.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.