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

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

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

Сообщение finsoftrz »

RaFaeL писал(а): 22 Ноябрь 2019, 16:46
finsoftrz писал(а): 22 Ноябрь 2019, 12:33Хороший костыль такой, у которого миллионы пользователей.
А у libcurl не миллионы? Это же одно и то же. Одни и те же функции вызываются либо через exe, либо напрямую. Зачем эта прокладка в виде exe? Она просто не нужна, это костыль по определению
Разговор идет про кларионовскую обертку.
RaFaeL писал(а): 22 Ноябрь 2019, 16:46
finsoftrz писал(а): 22 Ноябрь 2019, 12:33Причем CURL.EXE поначалу, насколько помню, работал на юниксовых системах, и только потом его портировали на винду. В юниксовых системах концепция микроприложений, там, по моему, вообще понятия dll нет.
Вот это новости )) А exe на юниксовых системах давно появился? ))

Все с точностью до наоборот. Есть libcurl для всего, и для винды есть curl.exe как чисто виндовый интерфейс всего этого
Наверно, я некорректно скопипастил CURL.EXE, надо было просто curl. Который был портирован на винду с юникса. Вроде и так должно быть понятно, про что речь.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

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

Сообщение RaFaeL »

finsoftrz писал(а): 22 Ноябрь 2019, 17:30Разговор идет про кларионовскую обертку.
Ну так можно свою написать. Был бы смысл (хинт: его нет)
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

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

Сообщение morkovin »

Вот что получается. Новый bat-файл:

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

curl --tr-encoding -X POST -v -# -o output -T abaeva.xml http://priem.edu.ru:8000/XML/UploadXML ^
-H "ContentType:application/x-www-form-urlencoded"^
 -H "Accept-Language: ru"^
 -H "Accept-Charset: utf-8"^
 -H "Content-Language: ru"^
 -H "Content-Charset: utf-8"^
 
Во-первых, видно, что изменился URL. Я почему-то узнал об этом последним...
Вот ответ:

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

*   Trying 85.143.100.11:8000...
* TCP_NODELAY set
* Connected to priem.edu.ru (85.143.100.11) port 8000 (#0)
> POST /XML/UploadXML HTTP/1.1
> Host: priem.edu.ru:8000
> User-Agent: curl/7.67.0
> Accept: */*
> Connection: TE
> TE: gzip
> ContentType:application/x-www-form-urlencoded
> Accept-Language: ru
> Accept-Charset: utf-8
> Content-Language: ru
> Content-Charset: utf-8
> Content-Length: 250011
> Expect: 100-continue
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 302 Found
< Location: /Account/AuthError?statusID=3
< Server: Microsoft-IIS/7.0
< X-Powered-By: ASP.NET
< Date: Fri, 22 Nov 2019 16:24:11 GMT
< Content-Length: 146
* HTTP error before end of send, stop sending
<
{ [146 bytes data]
                                                                           0,1%*
 Closing connection 0
Меня просто перенаправили на страницу входа, где надо вводить логин и пароль (как последнему юзеру)
Но у меня-то логин и пароль записаны в XML-файле согласно их спецификации

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

<?xml version="1.0" encoding="utf-8"?>
<Root name="Root">
	<AuthData name="AuthData">
		<Login name="Login">qwerty@yandex.ru</Login>
		<Pass name="Pass">XXXX123</Pass>
		<InstitutionID name="InstitutionID">1453</InstitutionID>
		<CampageUID name="CampageUID">Д01000003450007019</CampageUID>
	</AuthData>
	<Enrollees name="Enrollees">
	....
	
Что же происходит? То ли сервис не работает (а как узнать)? То ли я туплю?
Кстати,
Content-Length: 250011
это реальный размер передаваемого файла.
WBR, morkovin
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

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

Сообщение Игорь Столяров »

morkovin писал(а): 22 Ноябрь 2019, 19:40логин и пароль записаны в XML-файле согласно их спецификации
Тут нужно смотреть организацию конкретного сервиса и его интерфейсы.
Может существовать имя/пароль доступа к самому сервису (на ввод которого Вас отправили) - он передаётся в шапке POST запроса.
Также может существовать идентификация внутри системы на выполнение конкретного действия, вот она уже внутри тела запроса.

У Вас сервис не принимает вообще запрос (AuthError), т.к. не нет данных идентификации в BAT файле.
Например вот здесь есть описание: http://fkn.ktu10.com/?q=node/10465
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

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

Сообщение Дед Пахом »

morkovin писал(а): 22 Ноябрь 2019, 19:40Вот что получается.
В коде 1С у Вас есть
ПараметрыПОСТ = "inputXML=" + СокрЛП(стр);
в скрипте я этого не вижу, "-T abaeva.xml" это не то же самое.
С уважением, ДП
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

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

Сообщение morkovin »

Дед Пахом писал(а): 23 Ноябрь 2019, 0:20
morkovin писал(а): 22 Ноябрь 2019, 19:40Вот что получается.
В коде 1С у Вас есть
ПараметрыПОСТ = "inputXML=" + СокрЛП(стр);
в скрипте я этого не вижу, "-T abaeva.xml" это не то же самое.
Да, я тоже это душой понимаю. Но как вставить в скрипт "inputXML=" + СОДЕРЖИМОЕ(abaeva.xml ) ума не приложу. Ведь размер файла 250011 байт. Т.е. в nettalk это выглядело бы примерно так
WBR, morkovin
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

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

Сообщение Игорь Столяров »

morkovin писал(а): 23 Ноябрь 2019, 4:14Но как вставить в скрипт "inputXML=" + СОДЕРЖИМОЕ(abaeva.xml ) ума не приложу
Для командной строки синтаксис будет: curl.exe -d @zapros.xml -o otvet.xml нттп://myservice.com (+ настройка, логин и т.д.)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

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

Сообщение morkovin »

Подрихтовал пример для libCURL PostFile:

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

curl                          TCurlClass
res                           CURLcode
url                           STRING(256)
argname                       STRING(32)
infile                        STRING(300000)
respfile                      STRING(256)
ContLen                       LONG
  CODE

  curl.Init()
  
  url = 'http://priem.edu.ru:8000/XML/UploadXML'
  argname = 'inputXML'
        infile = 'abaeva.xml'
        !ContLen=infile{PROP:FileSize}
        !MESSAGE(ContLen,infile)
  respfile = 'post_response.txt'
  !------- mia ----------
    curl.SetOpt(2,'utf-8')
    curl.AddHttpHeader('ContentType:application/x-www-form-urlencoded;  charset=utf-8')
    curl.AddHttpHeader('Accept-Language: ru')
    curl.AddHttpHeader('Accept-Charset: utf-8')
    curl.AddHttpHeader('Content-Language: ru')
    curl.AddHttpHeader('Content-Charset: utf-8')
    curl.AddHttpHeader('ContentLength: 250220') !&ContLen&'<27>')
    curl.SetHttpHeaders() 
  !-----------------------      
  res = curl.PostFile(url, argname, infile, respfile)
  IF res = CURLE_OK
    MESSAGE('Success, see file '& CLIP(respfile) &' for details', 'Post test', ICON:Asterisk)
  ELSIF res = -1
    MESSAGE('curl_formadd failed: errcode '& res, 'Post test', ICON:Asterisk)
  ELSE
    MESSAGE('PostFile failed: '& curl.StrError(res), 'libcurl', ICON:Exclamation)
  END
В DebugView видны все детали.XML-файл передаётся:
23.11_1.png
Но всё равно перенаправляет на страницу авторизации. Наверно, что-то с сервисом в этой багодельне.
WBR, morkovin
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

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

Сообщение morkovin »

Игорь Столяров писал(а): 23 Ноябрь 2019, 5:57
morkovin писал(а): 23 Ноябрь 2019, 4:14Но как вставить в скрипт "inputXML=" + СОДЕРЖИМОЕ(abaeva.xml ) ума не приложу
Для командной строки синтаксис будет: curl.exe -d @zapros.xml -o otvet.xml нттп://myservice.com (+ настройка, логин и т.д.)
Спасибо! Попробую.
WBR, morkovin
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

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

Сообщение Игорь Столяров »

morkovin писал(а): 23 Ноябрь 2019, 6:16Но всё равно перенаправляет на страницу авторизации.
Попробуйте добавить перед curl.PostFile Ваши регистрационные данные:

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

  MyCurl.SetUserPwd(xUser_,xPass_)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

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

Сообщение Дед Пахом »

Если открыть такой вот html файл в браузере, ввести имя xml и отправить файл, то реально идёт переадресация на страницу авторизации. Правда, мой xml может быть кривым.

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

<!DOCTYPE html>
<html>
<head>
</head>
<body>

<form action="http://priem.edu.ru:8000/XML/UploadXML">
  <div>
    <label for="InputXML"><b>XML file</b></label>
    <input type="text" placeholder="Enter XML file" name="InputXML">
  </div>

  <div>
    <button type="submit">Send file</button>
  </div>
</form>

</body>
</html>

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

<?xml version="1.0" encoding="utf-8"?>
<Root name="Root">
	<AuthData name="AuthData">
		<Login name="Login">qwerty@yandex.ru</Login>
		<Pass name="Pass">XXXX123</Pass>
		<InstitutionID name="InstitutionID">1453</InstitutionID>
		<CampageUID name="CampageUID">Д01000003450007019</CampageUID>
	</AuthData>
	<Enrollees name="Enrollees">
	</Enrollees>
</Root>
С уважением, ДП
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

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

Сообщение morkovin »

Спасибо всем откликнувшимся! За эти пару дней я ужас как продвинулся в XML, HTML, кодировка и форматах. :D
Даже для себя накропал пару полезных утилит для дальнейшего развития.
В конкретном случае думаю, что они просто отключили этот сервис - видимо дорабатывают. Иначе мы бы получали какой-нибудь осмысленный ответ:

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

Ошибка	{
"SUCCESS":false,
"GUIDS":[
{
"UID":"NULL",
"GUID":" NULL"
}
],
"Message":"Неверная Схема XML или поле FileBytes не Base64"
}

Ошибка	{
"SUCCESS":false,
"GUIDS":[
{
"UID":"NULL",
"GUID":" NULL"
}
],
"Message":"В пакете не содержатся данные для авторизации"
}

Ошибка	{
"SUCCESS":false,
"GUIDS":[
{
"UID":"NULL",
"GUID":" NULL"
}
],
"Message":"В пакете содержаться не верные данные для авторизации"
}

Ошибка	{
"SUCCESS":false,
"GUIDS":[
{
"UID":"NULL",
"GUID":" NULL"
}
],
"Message":"Непредвиденная ошибка"
}

В аттаче описание этого сервиса и ошибки . Всего-то с десяток страниц (Если кому интересно...)
Вложения
Opisanie servisa zagruzki dannkh (pdf) v sootvetstvii s prikazom 831 (1).zip
(38 КБ) 161 скачивание
WBR, morkovin
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

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

Сообщение Дед Пахом »

А если принудительно делать редирект? libcurl: метод FollowLocation, curl: параметр -L).
Вызвал curl.FollowLocation(), редирект на http://priem.edu.ru:8000/Account/AuthError?statusID=3 прошёл, сервис вернул ошибку
Bad Request - Invalid Verb
------------------------------------
HTTP Error 400. The request verb is invalid.
С уважением, ДП
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

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

Сообщение morkovin »

написал им письмо на "горячую" линию.По выходным , правда, она не работает...
WBR, morkovin
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

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

Сообщение morkovin »

Докладываю о результатах:
написал консольное приложение на C# (VS2015).Теперь можно отправлять XML-файлы (со сканами) в пакетном режиме, просто через BAT-файл. Имя передаваемого файла - первый аргумент командной строки. Настройки (URL, InpParam, TimeOut) - из INI-файла. Ответы сервера сохраняются в соответствующих текстовых файлах (*.log и *.err)
WBR, morkovin
Ответить