Jump to content
Калькуляторы

Использование 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>

 

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

Share this post


Link to post
Share on other sites

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

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/" 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

 

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this