|
работа с 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
|
там даже пример есть
|
|||
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 Если у тебя принимающий скрипт свой, то намного проще получить тело пост запроса в нем, а не пытаться отправить и получить файл. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |