Вход | Регистрация



работа с HTTPСоединение и ОтправитьДляОбработки на 1с.

работа с HTTPСоединение и ОтправитьДляОбработки на 1с.
Я
   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",имяВыходнойФайла,Заголовок);
 
 
   Mauser
 
1 - 20.09.16 - 13:29
(0) Какая прелесть, как ты этого добился?
   Kabz
 
2 - 20.09.16 - 13:36
у тебя поднят   сайт на веб сервер и сайт на локальном компе?
   Kabz
 
3 - 20.09.16 - 13:37
то есть веб сервер поднят на локальном компе ?
   police
 
4 - 20.09.16 - 13:49
(3) yes
   Nuobu
 
5 - 20.09.16 - 13:50
(4) В каком месте не работает?
   Mauser
 
6 - 20.09.16 - 13:55
(5) Не порть интригу, мы должны догадаться
   oleg_km
 
7 - 20.09.16 - 14:11
Мда
   AceVi
 
8 - 20.09.16 - 14:17
(6) 100 на красное!
   AceVi
 
9 - 20.09.16 - 14:25
(0) ОтправитьДляОбработки - а ты хелп читал? там в 1 параметре ниразу не имя файла.
   Mauser
 
10 - 20.09.16 - 14:33
(9) Еще один СП не читает
 
 Рекламное место пустует
   Mauser
 
11 - 20.09.16 - 14:34
Вариант синтаксиса: По файлу-источнику и адресу ресурса

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

Параметры:
<Источник> (обязательный)
Тип: Строка.
Адрес файла-источника.
   gitotuta
 
12 - 20.09.16 - 14:35
Адрес - это адрес хранилища , а не имя файла
   gitotuta
 
13 - 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 Тогда
       Сообщить("Код состояния " + Результат.КодСостояния + ". Проверка не выполнена");
    КонецЕсли;
Исключение
    Сообщить(ИнформацияОбОшибке().Описание, СтатусСообщения.Важное);
КонецПопытки; 


   Nuobu
 
14 - 20.09.16 - 14:36
(11) Я чего-то не понимаю, или у меня другой СП?
   Nuobu
 
15 - 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 Тогда
       Сообщить("Код состояния " + Результат.КодСостояния + ". Проверка не выполнена");
    КонецЕсли;
Исключение
    Сообщить(ИнформацияОбОшибке().Описание, СтатусСообщения.Важное);
КонецПопытки;
 

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

     Методическая информация
   Mauser
 
16 - 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Соединение(АдресСервераОнлайнПроверки, , , , Прокси);
Исключение
    Сообщить("Не удалось установить соединение с сервером онлайн-проверки:" 
        + Символы.ПС + ИнформацияОбОшибке().Описание, СтатусСообщения.Важное);
    Возврат;
КонецПопытки;

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

ФайлРезультата = ПолучитьИмяВременногоФайла();
Попытка
    Соединение.ОтправитьДляОбработки(ИмяФайлаЗапроса, РесурсНаСервере, ФайлРезультата);
    Соединение = Неопределено;
Исключение
    Сообщить(ИнформацияОбОшибке().Описание, СтатусСообщения.Важное);
КонецПопытки;
   Mauser
 
17 - 20.09.16 - 14:38
1С:Предприятие 8.2 (8.2.19.130) =)
   Nuobu
 
18 - 20.09.16 - 14:40
(17) 8.3.6.2524
   AceVi
 
19 - 20.09.16 - 15:22
Походу мы своей телепатией пробили голову ТС насквозь) Аккуратней надо, товарищи.
   police
 
20 - 21.09.16 - 19:23
(15) Cпасибо
   ramir
 
21 - 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

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


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует