|
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.ПолучитьТелоКакСтроку()); Иначе Сообщить("Успешно выгружен пакет"); КонецЕсли; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |