Отправить XML-файл через POST с параметрами

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
morkovin
Ветеран
Сообщения: 668
Зарегистрирован: 20 Июль 2005, 13:53
Откуда: Volgograd, Russia
Контактная информация:

Отправить XML-файл через POST с параметрами

Сообщение morkovin » 21 Ноябрь 2019, 17:52

Это пример кода из 1С - отправка XML- на тестовый сервер ФИС ГИА (товарищ прислал). Образец файла у меня есть. Доступ к защищенной сети (VIp-net) - будет

Код: Выделить всё

WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Option(2,"utf-8");
WinHttp.Open("POST","http://10.0.3.1:8080/XML/UploadXML/",0);
WinHttp.SetRequestHeader("Accept-Language", "ru");
WinHttp.SetRequestHeader("Accept-Charset","utf-8");
WinHttp.setRequestHeader("Content-Language", "ru");
WinHttp.setRequestHeader("Content-Charset", "utf-8");
WinHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");
ТекстовыйФайл = Новый ТекстовыйДокумент;
ТекстовыйФайл.Прочитать(ПутьКПапке+"send.xml"); //Тут лежит на диске xml файл. такой файл у меня есть, но 1с нету
стр=ТекстовыйФайл.ПолучитьТекст();
ПараметрыПОСТ = "inputXML=" + СокрЛП(стр);
WinHttp.Send(ПараметрыПОСТ);
ТекстОтвета = WinHttp.ResponseText();
Т=Новый ТекстовыйДокумент;
Т.ДобавитьСтроку(ТекстОтвета);
Т.Записать(ПутьКПапке+Метод+".xml");//Тут ответ сервиса будет лежать
Как такое можно сделать через libcurl for Clarion или с помощью cURL для командной строки (может это проще?).
Куда копать? Может есть простая библиотечка типа WinHttp как у 1С?
WBR, morkovin

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2322
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

Отправить XML-файл через POST с параметрами

Сообщение Дед Пахом » 21 Ноябрь 2019, 18:05

Такое можно сделать через libcurl for Clarion, такое можно сделать с помощью cURL, Вы не поверите, но такое можно сделать даже с помощью NetTalk. Копайте примеры.
С уважением, ДП

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4323
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Отправить XML-файл через POST с параметрами

Сообщение Игорь Столяров » 21 Ноябрь 2019, 20:56

Действительно, в примерах LibCurl всё есть и даже возможны варианты реализации,
для StartUp можно начать вот с такого:

Код: Выделить всё

MyCurl            TCurlHTTPClassEx

! xURL_ - строка подключения к сервису
! xRequest_ - IDynStr или строка с XML документом запроса к сервису
! Loc:Answer - IDynStr или строка с ответом сервиса на запрос

  Code 
   
  MyCurl.Init()
  MyCurl.FreeHttpHeaders()

  MyCurl.AddHttpHeader('Content-Type: text/xml')
  MyCurl.AddHttpHeader('Content-Charset: utf-8')
  ! и т.д. указываем параметры шапки запроса
  MyCurl.SetHttpHeaders()

  ! --- Поддержка HTTPS (если нужно)
  If Sub(Lower(Clip(Left(xURL_))),1,5) = 'https'
     MyCurl.SetSSLVersion(CURL_SSLVERSION_DEFAULT)
     MyCurl.SetSSLVerifyHost(False)
     MyCurl.SetSSLVerifyPeer(False)
     !MyCurl.SetOpt(CURLSSH_AUTH_AGENT,Loc:UserAgent)
  end

  Loc:Res = MyCurl.SetCustomRequest('POST')

  MyCurl.SetOpt(CURLOPT_CONNECTTIMEOUT,20)
  Loc:Res = MyCurl.SetUserAgent('Mozilla/1.22 (compatible; MSIE 10.0; Windows 3.1)')

  ! --- Пользователь и пароль
  If (Clip(Left(xUser_)) <> '') Or (Clip(Left(xPass_)) <> '') then MyCurl.SetUserPwd(Clip(Left(xUser_)),Clip(Left(xPass_))).

  ! --- Собственно сам запрос
  If MyCurl.SetPostFields(xRequest_) = CURLE_OK  ! Установить параметры запроса

        Loc:Res = MyCurl.SendRequest(Clip(xURL_),Loc:Answer)
        If Loc:Res = CURLE_OK
           xRCode_ = MyCurl.GetResponseCode()   ! Получить код ответа сервиса на запрос     
           If  xRCode_ <> 200 then можно показать ошибки   
        elsIf Loc:Res = -1
           ! 'Неизвестная ошибка запроса: ' & Loc:Res
        else
           ! 'Ошибка запроса: ' & Loc:Res & '| ' & MyCurl.StrError(Loc:Res)
        end
  else
     ! 'Не удалось установить параметры запроса !'
  end

  MyCurl.CleanUp()  
С командной строкой и файлами на диске в 2019 г. работать уже совсем не комильфо.
Да и антивирусы лишний раз раздражать запуском внешней программы ни к чему. ;)
«V» значит Вендетта !

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2322
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

Отправить XML-файл через POST с параметрами

Сообщение Дед Пахом » 21 Ноябрь 2019, 21:12

Кстати, насчёт HTTPS есть новая запись в Q&A: https://clarionhub.com/t/libcurl-faq-ht ... rl/1965/11
С уважением, ДП

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4323
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Отправить XML-файл через POST с параметрами

Сообщение Игорь Столяров » 21 Ноябрь 2019, 21:21

Так вроде в исходном "кирпиче" от 1С сертификат не юзают … :)
«V» значит Вендетта !

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2322
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

Отправить XML-файл через POST с параметрами

Сообщение Дед Пахом » 21 Ноябрь 2019, 21:32

ну сегодня на тестовый сервер шлют, завтра на нормальный захотят.
С уважением, ДП

Аватара пользователя
porutchik
Посетитель
Сообщения: 44
Зарегистрирован: 01 Февраль 2009, 5:35

Отправить XML-файл через POST с параметрами

Сообщение porutchik » 21 Ноябрь 2019, 22:19

morkovin писал(а):
21 Ноябрь 2019, 17:52
Как такое можно сделать через libcurl for Clarion или с помощью cURL для командной строки (может это проще?).
Куда копать? Может есть простая библиотечка типа WinHttp как у 1С?
а чем хуже INCLUDE('ClaRunExt.CLW')?

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4323
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Отправить XML-файл через POST с параметрами

Сообщение Игорь Столяров » 21 Ноябрь 2019, 23:48

porutchik писал(а):
21 Ноябрь 2019, 22:19
а чем хуже INCLUDE('ClaRunExt.CLW')?
Кто работал с методами из ClaRunExt.CLW, тот в цирке не смеётся … ;)
«V» значит Вендетта !

Аватара пользователя
morkovin
Ветеран
Сообщения: 668
Зарегистрирован: 20 Июль 2005, 13:53
Откуда: Volgograd, Russia
Контактная информация:

Отправить XML-файл через POST с параметрами

Сообщение morkovin » 22 Ноябрь 2019, 5:20

Игорь Столяров писал(а):
21 Ноябрь 2019, 21:21
Так вроде в исходном "кирпиче" от 1С сертификат не юзают … :)
1. Думаю, сертификаты и не нужны ибо:
Для согласования подключения образовательная организация обязана:

подать уведомление в Роскомнадзор о внесении в реестр операторов персональных данных
разработать и принять пакет организационно-распорядительной документации, по защите персональных данных (перечень)
выделить или приобрести автоматизированное рабочее место (АРМ)
оснастить АРМ сертифицированными средствами технической и криптографической защиты информации, тем самым, превратив его в защищённое АРМ (ЗАРМ)
выделить помещение для установки ЗАРМ, удовлетворяющее требования по безопасности персональных данных
разработать для работы на ЗАРМ сопроводительную документацию
аттестовать ЗАРМ по требованиям безопасности информации в организации имеющей лицензию ФСТЭК
направить в ФЦТ, ЦИТиС или НИРО весь разработанный пакет документов и запрос на выпуск парольно-ключевой информации, и получить её
настроить средства защиты ЗАРМ для работы с сетями ФЦТ и ЦИТиС (НИРО)
И только после этого приступить к внесению данных в ФИС ЕГЭ, ФИС ГИА, ФИС ФРДО и АИС "Контингент".

Многое из перечисленного, возможно сделать самостоятельно, а вот для аттестации рабочего места без подрядчика с лицензией не обойтись (конечно, если Вы сами не обладатель лицензии ФСТЭК на техническую защиту конфиденциальной информации).
...

СПЕЦИАЛИСТЫ НАШЕЙ ЛАБОРАТОРИИ С РАДОСТЬЮ ОКАЖУТ ВАШЕМУ УЧЕБНОМУ ЗАВЕДЕНИЮ УСЛУГИ ПО АТТЕСТАЦИИ ЗАРМ. ИЛИ ВЕСЬ КОМПЛЕКС УСЛУГ, НЕОБХОДИМЫХ ДЛЯ ПОДКЛЮЧЕНИЯ К ФЕДЕРАЛЬНЫМ ИНФОРМАЦИОННЫМ СИСТЕМАМ ЕГЭ, ГИА, ФРДО И АИС "КОНТИНГЕНТ".
Для бюджетных организаций действует специальное предложение.
Цена организации защищённого рабочего места, с последующей аттестацией и подключением к ФИС ФРДО, ФИС ГИА и приёма и АИС "Контингент" составляет 59 870 рублей.
2. Весь сыр-бор из-за того, что разработчики предлагают веб-прогу без функций пакетного ввода. Ограничились возможностью пакетной передачи файлов (XML) через соответствующий реальныйсервер (или тестовый сервер для отладки). И теперь каждая организация должна решать вопрос сопряженения самостоятельно. Или вносить всё вручную с одного АРМ !
3. Убивает то, что всё это разработано на бюджетные деньги, внедряется в ВУЗы и ССУЗы в приказном порядке и с нас (бюджетников) ещё деньги стригут :shock:
WBR, morkovin

Аватара пользователя
morkovin
Ветеран
Сообщения: 668
Зарегистрирован: 20 Июль 2005, 13:53
Откуда: Volgograd, Russia
Контактная информация:

Отправить XML-файл через POST с параметрами

Сообщение morkovin » 22 Ноябрь 2019, 5:35

У кого что болит, тот о том и говорит.
(народная поговорка)
У кого-то это кассы. У нас это ФИСы. Сейчас им срочно и обязательно стали нужны сканы(!) документов, не имеющих реквизитов:
- сканы заявлений абитуриентов (поступивших!), причем не позднее трех дней после окончания приёмной кампании. (сроки, правда, всё время растягиваются из-за сырости их разработок)
- Сканы документов, подтверждающих особые достижения абитуриента - грамоты, призы, участие в олимпиадах
- Скан экзаменационного листа
Что ещё там придумают? Скан паспорта? Да, уже есть такое для иностранных абитуриентов! Но личико надо заретушировать.
WBR, morkovin

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4323
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Отправить XML-файл через POST с параметрами

Сообщение Игорь Столяров » 22 Ноябрь 2019, 5:38

morkovin писал(а):
22 Ноябрь 2019, 5:20
и с нас (бюджетников) ещё деньги стригут
Забыли упомянуть, что сначала Вам (бюджетникам) эти деньги просто дают … ;)
А вообще - большая и интересная работа ждёт Вас впереди, здесь главное, что бы этот сервис обмена действительно работал. :)
«V» значит Вендетта !

Аватара пользователя
morkovin
Ветеран
Сообщения: 668
Зарегистрирован: 20 Июль 2005, 13:53
Откуда: Volgograd, Russia
Контактная информация:

Отправить XML-файл через POST с параметрами

Сообщение morkovin » 22 Ноябрь 2019, 5:47

Вот набросал bat-файл для cURL:

Код: Выделить всё

curl -d "InputXML= Abaeva_44488.xml" http://10.0.3.1:8080/XML/UploadXML ^
 -H "Accept-Language: ru"^
 -H "Accept-Charset: utf-8"^
 -H "Content-Language: ru"^
 -H "Content-Charset: utf-8"^
 -H "application/x-www-form-urlencoded; charset=utf-8"
чтобы начать тестирование я должен
- попасть в
помещение для установки ЗАРМ, удовлетворяющее требования по безопасности персональных данных
- выполнить
запрос на выпуск парольно-ключевой информации, и получить её
- получить пароль короче.
либо просто взять этот защищённый ноутбук на выходные и отлаживать пакетную передачу дома рядом со своим инструментальным компом. :)
WBR, morkovin

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1393
Зарегистрирован: 06 Ноябрь 2014, 12:48

Отправить XML-файл через POST с параметрами

Сообщение finsoftrz » 22 Ноябрь 2019, 9:22

Игорь Столяров писал(а):
21 Ноябрь 2019, 20:56
С командной строкой и файлами на диске в 2019 г. работать уже совсем не комильфо.
В 2019 году любой 1С-ник знает, что работать с чем-то, кроме 1С, не комильфо. В 2019 году любой кларионист скажет, что счастье - это наличие выбора. :-)
Рязань решает.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4323
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Отправить XML-файл через POST с параметрами

Сообщение Игорь Столяров » 22 Ноябрь 2019, 10:04

finsoftrz писал(а):
22 Ноябрь 2019, 9:22
любой 1С-ник знает, что работать с чем-то, кроме 1С, не комильфо
У 1С-ника особого выбора нет, что среда предоставляет - то и юзает. :)
Clarion конечно не C#, но выбор внешних библиотек есть и надо им пользоваться. :)
«V» значит Вендетта !

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1393
Зарегистрирован: 06 Ноябрь 2014, 12:48

Отправить XML-файл через POST с параметрами

Сообщение finsoftrz » 22 Ноябрь 2019, 10:27

Надо максимально отдалять состояние, когда ходишь и на фонарики улыбаешься. :-)
Рязань решает.

Ответить