1с как через post метод передать массив

от admin

1с как через post метод передать массив

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

  • Как получить страницу сайта через http-запрос
  • Как обработать перенаправление в http-запросе
  • Как сохранить картинку с сайта через http-запрос
  • Как послать защищенный https запрос к серверу
  • Как установить заголовки http-запроса
  • Как указать прокси для http-запроса
  • Как послать post-запрос через http
  • Скачать и выполнить эти примеры на компьютере

Работа с http-запросами (get и post) в языке 1С 8.3, 8.2 (в примерах)

С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).

Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

1с как через post метод передать массив

Цель блога описать интересные и полезные примеры программирования в системе 1С:Предприятие 8.

Страницы

  • Заметки
  • Конфигурация Библиотека
  • WSReader 2.0 — Чтение и исполнение веб-сервисов

воскресенье, 20 апреля 2014 г.

1С:Предприятие 8. Веб-сервисы. Передаем массив в 1С

Чтобы передать массив в 1С в качестве параметра операции веб сервиса достаточно просто этому параметру указать тип anyType (http://www.w3.org/2001/XMLSchema). После чего, переданный из php массив, в 1С будет передан как СписокXDTO, который можно обходить в цикле.

Давайте создадим веб сервис и операцию «GetMass». Для этой операции добавим один параметр «param» типа anyType (http://www.w3.org/2001/XMLSchema) как показано на рисунке.

В принципе, это все что необходимо сделать.

Следующий код передает массив в 1С.

// устанавливаем кодировку
header(«Content-Type: text/html; charset=UTF-8»);
ini_set(«soap.wsdl_cache_enabled»,»0″);

// создаем клиент для веб-сервисов и вызываем операцию
$SoapClient1C = new SoapClient(«http://ghostaz.no-ip.org/mass/ws/WebСервис?wsdl»);
$Mass = array(1,2,3);
$Result = $SoapClient1C->GetMass(array(«param»=>$Mass));

В 1С в отладчике можно увидеть что params имеет тип СписокXDTO.

Соответственно возможен обход в цикле:

Функция GetMass ( param )

Результат = 0 ;
Для каждого Значение из param.int цикл
Результат = Результат + Значение ;
КонецЦикла;

Вместо типа anyType можно использовать другие типы, например, array из стандартных типов 1С datacore.

UPD от 01.09.2015:

По каким то причинам передать массив или структуру в веб сервис из 1С нельзя. Ругается на несоответствие типов. Но передать параметр можно, если в операцию передать ОбъектXDTO.

1С Как передать в несколько значений в один параметр в запросе с помощью массива

В 1С практические у любого запроса есть параметры (условия по которым делается отбор данных), как минимуму это даты, но чаще всего в запрос передают несколько параметров, для того чтобы выборка была более точной. Так же в большинстве случаев у каждого параметра всего одно значение, например, дата начала периода, дата окончания или название номенклатуры и т.д. Но в один параметр запроса можно передать несколько значений, сделать это можно с помощью массива и это должны быть ссылки, но давайте обо всем по порядку.

Передаем в запрос массив

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

1С несколько значений одного параметра

В параметр «Сотрудник» можно передать несколько значений т.е не одного сотрудника а нескольких, для этого необходимо немного изменить запрос и добавить собственно сам массив. В запросе меняем следующею строчку, указываем что данный параметр это массив со ссылками на значения.

Ниже добавляем массив, значения массива должны быть ссылками, если элемент массива будет выглядеть вот так, то запрос не отработает так как не найдет данного сотрудника.

Для примера я добавляю в массив ссылку на сотрудника и просто укажу его.

Весь код будет выглядеть следующим образом.

Как передать массив в запрос

Запускаем отладку и смотрим что у нас находиться в передаваемом массиве. Для этого кликаем ПКМ мыши передаваемом в параметре названии массива и выбираем пункт «Вычислить выражение».

1С как передать несколько значений с помощью одного параметра

В открывшемся окне выделяем массив и нажимаем «Показать значения в отдельном окне».

Как передать в запрос массив

И видим значения массива, в данном случае в запросе обработается только значение переданное в качестве ссылки.

как передать с помощью параметра массив

Вот таким образом в запрос с помощью одного параметра можно передать несколько значений. Остались вопросы или что-то не понятно обязательно пишите!

Как отправить массив значений в POST запросе

Подскажите, как из 1С отправить POST запрос в котором есть массивы
Вот текст запроса, который отправляю через curl и он правильно работает
‘name’ => ‘имя’,
‘type_id’ => ‘1’,
‘massive1’ => [
‘color’ => [
2 => ‘желтый’,
3 => ‘зеленый’,
]
]
];

Пробовал сделать так:
ЗапросВ = Новый HTTPЗапрос();
ЗапросВ.Заголовки = Заголовки;
СтрокаJSON = КодироватьСтроку(стрЗапрос, СпособКодированияСтроки.URLВКодировкеURL);
ЗапросВ.УстановитьТелоИзСтроки(СтрокаJSON);
Соединение.ОтправитьДляОбработки(ЗапросВ);

в стрЗапрос строку такого вида
стрТовара = «name=имя&type_id=1&massive1[color][2]=желтый&massive1[color][3]=зеленый»;
Имя и ИД передаются нормально, а массив-нет. Как правильно его задавать?

  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти

(6)Вообще если в массиве пары ключ-значение и аналог json должен выглядеть вот так:
,

]
>
]
>
То application/x-www-form-urlencoded «name=имя&type_id=1&massive1[0][color][0][2]=желтый&massive1[0][color][1][3]=зеленый»
Сначала получаем элемент массива по индексу, потом обращаемся к ключу
Откуда вы взяли ключ features? В ТС его нет.

Http запросы GET и POST в языке 1С 8. Примеры работы

В статье приводятся практические примеры работы с самыми часто используемыми HTTP запросами средствами языка 1С – GET и POST.

Содержание

Общая информация

Для различного рода интеграций, обменов данными и взаимодействия между разными системами широко используется протокол http, и платформа 1С имеет ряд инструментов и объектов для работы с этим протоколом.

Основные объекты языка 1С, предназначенные для работы с протоколом http – HTTPСоединение, HTTPЗапрос и HTTPОтвет. Для организации работы через прокси-сервер используется объект ИнтернетПрокси, а для создания защищенного https-соединения существует объект ЗащищенноеСоединениеOpenSSL. Есть еще ряд объектов, которые могут применяться при работе с протоколом HTTP, но они используются достаточно редко, а потому в данной статье не рассматриваются.

HTTPСоединение отвечает за создание соединения с сервером по протоколу HTTP. Свойства этого объекта позволяют задать параметры авторизации, такие как логин, пароль и признак аутентификации ОС, а также параметры подключения – адрес сервера, порт, прокси, таймаут, и защищенное соединение. Методы объекта HTTPСоединение повторяют основные методы HTTP, такие как Get, Post, Put, Delete и др.

Читать:
Чем открыть файл csv на компьютере

HTTPЗапрос позволяет задать заголовки, адрес запрашиваемого ресурса и тело запроса. Методы данного объекта предназначены для различных способов получения и установки тела запроса.

HTTPОтвет является результатом отправки запроса через соединение. В свойствах этого объекта будут содержаться ответные заголовки и код состояния, а методы предназначены для получения тела ответа в различном виде (например, как двоичные данные или в виде строки).

ИнтернетПрокси, как следует из названия, используется для указания настроек прокси-сервера. Для каждого протокола можно независимо указать параметры прокси-сервера при помощи метода Установить().

ЗащищенноеСоединениеOpenSSL используется для создания защищенного соединения OpenSSL. Есть возможность указать сертификат клиента и/или удостоверяющего центра, но в большинстве случаев, при организации доступа к обычным сайтам по протоколу HTTPS, сертификаты указывать не требуется.

Http запрос с использованием защищенного соединения

Защищенное подключение используется для соединения с сервером по протоколу https. В случае, если запрашиваемый ресурс требует наличия сертификатов, существует возможность указать как клиентский сертификат, так и сертификаты удостоверяющих центров. Есть несколько нюансов, на которые стоит обратить внимание.

Объект клиентского сертификата СертификатКлиентаФайл (с приватным ключом), загружается из файла с форматом :
*.PFX; *.P12 – файл сертификата формата P12;
*.PEM – файл сертификата формата PEM.
по умолчанию – файл сертификата формата PEM.

Объект клиентского сертификата СертификатКлиентаWindows загружается из системного хранилища сертификатов операционной системы MS Windows.

Использование заголовков в http запросах в языке 1С

Для передачи кукис (Cookie), кэширования, хранения данных пользовательской сессии, выполнения запроса с указанием конкретного браузера, и для многих других целей, используются заголовки http запросов. Заголовки – это обычное соответствие, с парами Ключ: Значение. Помимо стандартных заголовков разработчик может передавать свои собственные, если это предусмотрено логикой принимающего сервера.

Получить страницу сайта при помощи http запроса GET

Get-запросу в языке 1С соответствует метод Получить(). Для большинства современных сайтов необходимо использовать защищенное соединение.

Сохранить картинку с сайта через GET-запрос

При помощи http протокола можно получать не только текстовые данные (html, json, xml и т.п.), но и другие объекты, доступные по url адресу – медиа-файлы, картинки и другие ресурсы. Рассмотрим пример получения логотипа компании 1С:

Как обработать перенаправление (redirect) http запроса в 1С

Переадресация при http запросе может возникнуть по разным причинам. Самые популярные:

  • смена адреса запрашиваемого ресурса (например, изменили название статьи, и вместе с ним – адрес)
  • переадресация с www
  • редирект с http на https

При переадресации сервер возвращает в заголовках параметр Location, в котором указано новое назначение.. Далее разработчик может проанализировать эту строку, выделить сервер, путь к ресурсу, логин и пароль, и сформировать новый запрос. Следует иметь в виду, что редиректов может быть несколько, и переадресация будет идти по цепочке. Рассмотрим простой пример переадресации с незащищенного соединения на безопасное по протоколу https:

Использование прокси сервера для http запросов в 1С

Интернет-прокси может использоваться для соединения по различным протоколам: http, https, ftp и ftps. Для каждого протокола необходимо вызвать метод Установить() с указанием нужных параметров – логина, пароля, адреса Proxy-сервера и т.д.

Использование http запросов типа POST в 1С 8

Запросы Post широко применяются в том случае, когда нужно передать на сервер какие-то данные для дальнейшей обработки – провести авторизацию, загрузить файл, передать большой массив данных в качестве параметров, и т.п.

Get запросы также имеют возможность параметризации, но длина адресной строки ограничена 2048 символами. Поэтому, если, например, вам нужно передать в качестве параметров 1000 наименований номенклатуры или 1000 электронных адресов сотрудников, для этого отлично подойдет post запрос. Post запрос отличается от запроса get тем, что помимо строки запроса и заголовков, имеет еще и тело запроса.

В языке 1С запросу POST соответствует метод ОтправитьДляОбработки(). Средствами языка 1С тело запроса может быть установлено из файла, из строки либо из двоичных данных.

Заметки 1С-Программиста

Цель блога описать интересные и полезные примеры программирования в системе 1С:Предприятие 8.

Страницы

  • Заметки
  • Конфигурация Библиотека
  • WSReader 2.0 — Чтение и исполнение веб-сервисов

воскресенье, 20 апреля 2014 г.

1С:Предприятие 8. Веб-сервисы. Передаем массив в 1С

Чтобы передать массив в 1С в качестве параметра операции веб сервиса достаточно просто этому параметру указать тип anyType (http://www.w3.org/2001/XMLSchema). После чего, переданный из php массив, в 1С будет передан как СписокXDTO, который можно обходить в цикле.

Давайте создадим веб сервис и операцию «GetMass». Для этой операции добавим один параметр «param» типа anyType (http://www.w3.org/2001/XMLSchema) как показано на рисунке.

В принципе, это все что необходимо сделать.

Следующий код передает массив в 1С.

<?php

// устанавливаем кодировку
header(«Content-Type: text/html; charset=UTF-8»);
ini_set(«soap.wsdl_cache_enabled»,»0″);

// создаем клиент для веб-сервисов и вызываем операцию
$SoapClient1C = new SoapClient(«http://ghostaz.no-ip.org/mass/ws/WebСервис?wsdl»);
$Mass = array(1,2,3);
$Result = $SoapClient1C->GetMass(array(«param»=>$Mass));

print_r($Result);

?>

В 1С в отладчике можно увидеть что params имеет тип СписокXDTO.

Соответственно возможен обход в цикле:

Функция GetMass ( param )

Результат = 0 ;
Для каждого Значение из param.int цикл
Результат = Результат + Значение ;
КонецЦикла;

Возврат Результат ;

КонецФункции

Вместо типа anyType можно использовать другие типы, например, array из стандартных типов 1С datacore.

UPD от 01.09.2015:

По каким то причинам передать массив или структуру в веб сервис из 1С нельзя. Ругается на несоответствие типов. Но передать параметр можно, если в операцию передать ОбъектXDTO.

Как в post запросе передать массив

адрес такой POST https://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/party
в заголовках указываю
Content-Type: application/json или application/xml.
Accept — аналогично.
1234567890 — API-ключ.
в параметрах передаю:
query string ИНН или ОГРН

вопрос как передать массив разных инн для проверки

(1) пробовал писать чтото такое на моменте ЗаписатьJSON падает с ошибкой
МассивДанныхJSON = Новый Массив;
СтруктураJSON = Новый Структура;
тДанные = Новый Структура;
Для Сч = 0 по массивконтров.ВГраница() Цикл
КонтрагентПро = массивконтров[Сч];
СведенияОКонтрагенте = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(КонтрагентПро, "ИНН, КПП, ЮрФизЛицо");
КонтрагентИННПРО = СокрЛП(СведенияОКонтрагенте.ИНН);
КонтрагентКПП = СокрЛП(СведенияОКонтрагенте.КПП);
КонтрагентВид = СведенияОКонтрагенте.ЮрФизЛицо;
тДанные.Вставить("query", КонтрагентИННПРО);
КонецЦикла;
МассивДанныхJSON.Добавить(тДанные);
СтруктураJSON.Вставить("data", МассивДанныхJSON);
ЗаписьJSON = новый ЗаписьJSON();
ЗаписатьJSON(ЗаписьJSON, СтруктураJSON);
СтрокаJS = ЗаписьJSON.Закрыть();

Похожие статьи