alibek Опубликовано 18 июня, 2015 · Жалоба Автоматизирую получение реестра ЕРДИ. Сейчас это делает самодельный скрипт на 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> Не подскажите, как сформировать запрос, чтобы получить ответ от сервера? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
bos9 Опубликовано 18 июня, 2015 · Жалоба У меня примерно так: 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/" Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vop Опубликовано 18 июня, 2015 · Жалоба Я пишу запрос во временный файл, а потом цепляю его через -d. Кстати, у soap есть свой Content-Type. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alibek Опубликовано 18 июня, 2015 · Жалоба Я сделал так, если кому интересно: 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 Так удобнее запрос корректировать, если РКН что-то обновит. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...