|   |   | 
| 
 | 1C HTTP сервисы. GET и POST запросы. | ☑ | ||
|---|---|---|---|---|
| 0
    
        andrey i1c 17.01.20✎ 15:51 | 
        Доброго времени суток! Необходимо из 1С посредством POST запроса передавать данные, в частности справочник Номенклатуру, на веб сервер. Ссылка API имеется. Скажите, если инструкция какая что то вроде мануала по шагам? или хотя бы описать все по шагам. Если кто сталкивался, отпишитесь пожалуйста. Буду благодарен!     | |||
| 1
    
        mikecool 17.01.20✎ 15:53 | 
        мануалов не видел, яндексишь, читаешь, затык - спрашиваешь     | |||
| 2
    
        lodger 17.01.20✎ 15:56 | 
        на курсах за N рублей, наверняка барыжат step-by-step мануалами и примерами.
 на всяких ресурсах наверняка есть статьи в духе "смотрите, я написал хелловорлд с помощью пост запроса". что не понятно то? делаешь HTTPСоединение = Новый HTTPСоединение("твои параметры"); HTTPСоединение.ОтправитьДляОбработки(ТелоЗапроса, ТекстЗапроса, "еще какие-то флажки\параметры"); | |||
| 3
    
        LOLYBUF 17.01.20✎ 15:57 | ||||
| 4
    
        mikecool 17.01.20✎ 15:57 | 
        (2) после курсов иногда заходишь в еще больший тупняк, ибо в курсах все работает, а в реалиях - не всегда )))     | |||
| 5
    
        azernot 17.01.20✎ 16:05 | 
        Простой пример выгрузки в формате JSON
 МассивRoot = Новый Массив; Пока ВыборкаПоНоменклатуре.Следующий() Цикл ДанныеНоменклатуры = Новый Структура; ДанныеНоменклатуры.Вставить("ID", Строка(ВыборкаПоНоменклатуре.Ссылка.УникальныйИдентификатор())); ДанныеНоменклатуры.Вставить("name", ВыборкаПоНоменклатуре.Наименование); ДанныеНоменклатуры.Вставить("code", ВыборкаПоНоменклатуре.Код); МассивRoot.Добавить(ДанныеНоменклатуры); КонецЦикла; // вставляем наш массив в еще одну структуру СтруктураRoot = Новый Структура; СтруктураRoot.Вставить("root", МассивRoot); ЗаписьJSON = Новый ЗаписьJSON; ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, " ", Истина); ЗаписьJSON.УстановитьСтроку(ПараметрыJSON); ЗаписатьJSON(ЗаписьJSON, СтруктураRoot); СтрокаJS = ЗаписьJSON.Закрыть(); ЗащищенноеСоединение = Ложь; Если ЗащищенноеСоединение Тогда HTTPСоединение = Новый HTTPСоединение(АдресСайта,443,Логин,Пароль,,,Новый ЗащищенноеСоединениеOpenSSL(Неопределено,Неопределено)); Иначе HTTPСоединение = Новый HTTPСоединение(АдресСайта, ПортСайта, Логин, Пароль); КонецЕсли; //создаем запрос данных методом POST запросPOST = Новый HTTPЗапрос(); запросPOST.Заголовки.Вставить("Content-type", "application/json"); запросPOST.АдресРесурса = АдресРесурса; //Здесь задаем текст нашей отформатированной строки + задаем формат сроки запросPOST.УстановитьТелоИзСтроки(СтрокаJS); //Отправляем для обрааботки на сервер ОтветHTTP = HTTPСоединение.ОтправитьДляОбработки(запросPOST); Если НЕ (ОтветHTTP.КодСостояния >= 200 И ОтветHTTP.КодСостояния < 300) Тогда Сообщить("Выгрузка пакета не произведена: Код ответа сервера - "+ОтветHTTP.КодСостояния+", Ответ: "+ОтветHTTP.ПолучитьТелоКакСтроку()); Иначе Сообщить("Успешно выгружен пакет"); КонецЕсли; | |||
| 6
    
        azernot 17.01.20✎ 16:07 | 
        (3)  А, ну я видимо оттуда и воровал :)     | |||
| 7
    
        pechkin 17.01.20✎ 16:11 | 
        зачем люди такие конструкции ставят?     на каких курсах этому учат? | |||
| 8
    
        mikecool 17.01.20✎ 16:14 | 
        (7) это с бородатых времен осталось     | |||
| 9
    
        pechkin 17.01.20✎ 16:21 | 
        разве были времена когда Сообщить на сервере не работало?     | |||
| 10
    
        novichok79 17.01.20✎ 16:35 | 
        (0) открываете ERP, смотрите работу с объектами httpсоединение, httpзапрос     | |||
| 11
    
        novichok79 17.01.20✎ 16:36 | 
        виды HTTP-запросов достаточно знать     | |||
| 12
    
        azernot 17.01.20✎ 17:02 | 
        (9) Были такие времена. Без скобок "Клиент" система вылетала по ошибке ещё при инициализации кода на сервере (Процедура или функция не обнаружена)     | |||
| 13
    
        andrey i1c 17.01.20✎ 18:00 | 
        (2) (5) (3) хотел обратиться для примера к сайту http://www.inmr.ru https соединением, а не http.
 Пишу ssl1 = Новый ЗащищенноеСоединениеOpenSSL(неопределено, неопределено); HTTPСоединение = Новый HTTPСоединение("http://www.inmr.ru", 443,,,,,ssl1); Но ответ не приходит как таковой. Что тут не так? также делал с параметрами ssl1 ssl1 = Новый ЗащищенноеСоединениеOpenSSL( Новый СертификатКлиентаWindows(), Новый СертификатыУдостоверяющихЦентровWindows()); //здесь надо указать путь к сайту HTTPСоединение = Новый HTTPСоединение("http://www.inmr.ru", 443,,,,, ssl1); приходит ответ такой <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>301 Moved Permanently</title> </head><body> <h1>Moved Permanently</h1> <p>The document has moved <a href="http://inmr.ru/POST">here</a>.</p> <hr> <address>Apache/2.4.10 (Unix) Server at http://www.inmr.ru Port 80</address> </body></html> в чем может быть дело? | |||
| 14
    
        lodger 17.01.20✎ 18:20 | 
        (13) дело в том, что ты сам и привел.
 ...Новый HTTPСоединение("http://www.inmr.ru"... сервер тебе говорит: 301 Moved Permanently The document has moved http://inmr.ru/POST | |||
| 15
    
        andrey i1c 17.01.20✎ 18:22 | 
        (14) как исправить можно?     | |||
| 16
    
        lodger 17.01.20✎ 18:22 | 
        (15) перепиши 
 Новый HTTPСоединение("http://www.inmr.ru" на Новый HTTPСоединение("http://inmr.ru/POST" | |||
| 17
    
        andrey i1c 17.01.20✎ 18:25 | 
        (16) а ЗащищенноеСоединениеOpenSS в параметры HTTPСоединение прописывать? 
 если да, то с параметрами, или в параметрах Неопределено? | |||
| 18
    
        andrey i1c 17.01.20✎ 18:30 | 
        //здесь пишем и выполняем запрос, в котором выбираем данные о нашем товаре
 //Код товара (code1c), наименование(представление) товара (name) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Код КАК code1c, | Номенклатура.Представление КАК name |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | НЕ Номенклатура.ЭтоГруппа | И НЕ Номенклатура.ПометкаУдаления"; Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); //Создали запись ЗаписьJSON ЗаписьJSON = Новый ЗаписьJSON; //Задаем параметры без переноса строк, можно сделать и с переносом тПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, " ", Истина); ЗаписьJSON.УстановитьСтроку(тПараметрыJSON); МассивДанныхJSON = Новый Массив; СтруктураДанныхJSON = Новый Структура; //Выбираем данные из запроса и записываем в массив "МассивДанныхJSON" Пока ВыборкаДетальныеЗаписи.Следующий() Цикл // Каждая запись товара у нас отдельная структура... тДанные = Новый Структура; тДанные.Вставить("code1c", ВыборкаДетальныеЗаписи.code1c); тДанные.Вставить("name", ВыборкаДетальныеЗаписи.name); //Добавляем структуру с информацией о товаре в наш массив "МассивДанныхJSON" МассивДанныхJSON.Добавить(тДанные); КонецЦикла; //вставляем наш массив в еще одну структуру СтруктураДанныхJSON.Вставить("test", МассивДанныхJSON); ЗаписатьJSON(ЗаписьJSON, СтруктураДанныхJSON); //Здесь нам платформа переделала нашу сложную структуру в строку данных в формате JSON СтрокаJS = ЗаписьJSON.Закрыть(); //В этот файл для примера наш сайт сформирует ответ после отправки на него данных методом POST ФайлОтвета = "C:\Users\User\Documents\temp\test.txt"; ssl1 = Новый ЗащищенноеСоединениеOpenSSL( Неопределено, Неопределено); //здесь надо указать путь к сайту HTTPСоединение = Новый HTTPСоединение("http://www.inmr.ru/POST", 443,,,,, ssl1); //создаем запрос данных методом POST запросPOST = Новый HTTPЗапрос("POST"); //это обязательный заголовок тела запроса запросPOST.Заголовки.Вставить("Content-type", "application/x-www-form-urlencoded"); //Здесь задаем текст нашей отформатированной строки + задаем формат сроки запросPOST.УстановитьТелоИзСтроки("mData="+СтрокаJS,"windows-1251",ИспользованиеByteOrderMark.НеИспользовать); Попытка //Отправляем для обрааботки на сервер HTTPСоединение.ОтправитьДляОбработки(запросPOST, ФайлОтвета); Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Пакет успешно был выгружен!"; Сообщение.Сообщить(); Исключение #Если клиент Тогда Сообщить(ОписаниеОшибки()); #КонецЕсли КонецПопытки; | |||
| 19
    
        andrey i1c 17.01.20✎ 18:31 | 
        выше описал весь код проблема я думаю все таки тут 
 ssl1 = Новый ЗащищенноеСоединениеOpenSSL( Неопределено, Неопределено); //здесь надо указать путь к сайту HTTPСоединение = Новый HTTPСоединение("http://www.inmr.ru/POST";, 443,,,,, ssl1); | |||
| 20
    
        andrey i1c 17.01.20✎ 18:31 | 
        что тут не так?     | |||
| 21
    
        azernot 17.01.20✎ 18:51 | 
        HTTPСоединение = Новый HTTPСоединение("http://www.inmr.ru";, 443,,,,, ssl1);
 //создаем запрос данных методом POST запросPOST = Новый HTTPЗапрос("POST"); запросPOST.Заголовки.Вставить("Content-type", "application/x-www-form-urlencoded"); запросPOST.АдресРесурса = "/POST"; Вот так попробуй | |||
| 22
    
        azernot 17.01.20✎ 18:55 | 
        +(21)
 Точнее даже так: Новый HTTPСоединение("http://inmr.ru";;, 443,,,,, ssl1); и далее по тексту | |||
| 23
    
        andrey i1c 17.01.20✎ 18:56 | 
        (21) (22)  а тут параметры оставить неопределно или прописать?
 ssl = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено); | |||
| 24
    
        andrey i1c 18.01.20✎ 11:05 | 
        (5) Спасибо. Высылаю рабочий код, может кому пригодится. Соединение нужно делать напрямую inmr.ru (без www) и в запросе адрес ресурса закоментить. Тема закрыта. Всем спасибо!
 Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Код КАК code1c, | Номенклатура.Представление КАК name |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | НЕ Номенклатура.ЭтоГруппа | И НЕ Номенклатура.ПометкаУдаления"; Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); МассивRoot = Новый Массив; Пока ВыборкаДетальныеЗаписи.Следующий() Цикл ДанныеНоменклатуры = Новый Структура; ДанныеНоменклатуры.Вставить("code1c", ВыборкаДетальныеЗаписи.code1c); ДанныеНоменклатуры.Вставить("name", ВыборкаДетальныеЗаписи.name); МассивRoot.Добавить(ДанныеНоменклатуры); КонецЦикла; СтруктураRoot = Новый Структура; СтруктураRoot.Вставить("root", МассивRoot); СтруктураRoot = Новый Структура; СтруктураRoot.Вставить("root", МассивRoot); ЗаписьJSON = Новый ЗаписьJSON; ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, " ", Истина); ЗаписьJSON.УстановитьСтроку(ПараметрыJSON); ЗаписатьJSON(ЗаписьJSON, СтруктураRoot); СтрокаJS = ЗаписьJSON.Закрыть(); //В этот файл для примера наш сайт сформирует ответ после отправки на него данных методом POST ФайлОтвета = "C:\Users\User\Documents\temp\test.txt"; ЗащищенноеСоединение = Истина; Если ЗащищенноеСоединение Тогда HTTPСоединение = Новый HTTPСоединение("inmr.ru",443,,,,,Новый ЗащищенноеСоединениеOpenSSL(Неопределено,Неопределено)); Иначе HTTPСоединение = Новый HTTPСоединение("inmr.ru", 80, , ); КонецЕсли; //создаем запрос данных методом POST запросPOST = Новый HTTPЗапрос(); запросPOST.Заголовки.Вставить("Content-type", "application/json"); // запросPOST.АдресРесурса = "inmr.ru"; //Здесь задаем текст нашей отформатированной строки + задаем формат сроки запросPOST.УстановитьТелоИзСтроки(СтрокаJS); //Отправляем для обработки на сервер ОтветHTTP = HTTPСоединение.ОтправитьДляОбработки(запросPOST, ФайлОтвета); Если НЕ (ОтветHTTP.КодСостояния >= 200 И ОтветHTTP.КодСостояния < 300) Тогда Сообщить("Выгрузка пакета не произведена: Код ответа сервера - "+ОтветHTTP.КодСостояния+", Ответ: "+ОтветHTTP.ПолучитьТелоКакСтроку()); Иначе Сообщить("Успешно выгружен пакет"); КонецЕсли; | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |