Перейти к содержимому
Калькуляторы

Использование CURL для запросов SOAP из скриптов

Автоматизирую получение реестра ЕРДИ.

Сейчас это делает самодельный скрипт на Perl.

Хочу избавиться от Perl и получать реестр напрямую из sh-скрипта, с помощью curl.

 

Сочинил такой код:

read -r -d '' BODY <<EOF
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
 <getLastDumpDateEx>
 </getLastDumpDateEx>
</soap:Body>
</soap:Envelope>
EOF
{
echo '--silent'
echo '--header "Content-Type: application/soap+xml; charset=utf-8"'
echo '--user-agent ""'
echo "--url ${WEBSVC}"
echo '--data-binary @-'
echo "$BODY"
} | curl --config - | xmllint --format -

 

Но он не работает, выдает ошибку:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
 <SOAP-ENV:Body>
   <SOAP-ENV:Fault>
     <faultcode>SOAP-ENV:Server</faultcode>
     <faultstring>Procedure 'getLastDumpDateEx' not present</faultstring>
   </SOAP-ENV:Fault>
 </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

 

Не подскажите, как сформировать запрос, чтобы получить ответ от сервера?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У меня примерно так:

curl -s -m300 --retry-delay 10 --retry 10 -H "Content-Type: text/xml; charset=utf-8" \
-H "SOAPAction:  http://vigruzki.rkn.gov.ru/services/OperatorRequest/getLastDumpDate" \
-d "<?xml version=\"1.0\" encoding=\"UTF-8\"?><SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" \
xmlns:ns1=\"http://vigruzki.rkn.gov.ru/OperatorRequest/\"><SOAP-ENV:Body><ns1:getLastDumpDate/></SOAP-ENV:Body></SOAP-ENV:Envelope>" \
"http://vigruzki.rkn.gov.ru/services/OperatorRequest/" 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я пишу запрос во временный файл, а потом цепляю его через -d. Кстати, у soap есть свой Content-Type.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я сделал так, если кому интересно:

V_DATE_DUMP=
V_DATE_URGENT=
read -r -d '' BODY <<EOF
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://vigruzki.rkn.gov.ru/OperatorRequest/">
<soap:Body>
 <tns:getLastDumpDateEx />
</soap:Body>
</soap:Envelope>
EOF
{
echo '--silent'
echo '--header "Content-Type: application/soap+xml; charset=utf-8"'
echo '--user-agent ""'
echo "--url ${WEBSVC}"
echo '--data-binary @-'
echo "$BODY"
} | $CURL --config - | xmllint --format - > /tmp/erdi_data.tmp
read V_DATE_DUMP V_DATE_URGENT <<< $($XML select --template -v "//lastDumpDate" -o " " -v "//lastDumpDateUrgently" /tmp/erdi_data.tmp)
rm -f /tmp/erdi_data.tmp
let V_DATE_DUMP=V_DATE_DUMP/1000
let V_DATE_URGENT=V_DATE_URGENT/1000

 

Так удобнее запрос корректировать, если РКН что-то обновит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.