Как сделать вызов веб-служб SOAP wsdl из командной строки


Мне нужно сделать вызов веб-сервиса SOAPhttps://sandbox.mediamind.com/Eyeblaster.MediaMind.API/V2/AuthenticationService.svc?wsdl и использовать операцию ClientLogin при прохождении через параметры: ApplicationKey, пароль и имя пользователя. Ответ-UserSecurityToken. Все они-струны.

вот ссылка, полностью объясняющая, что я пытаюсь делать: https://sandbox.mediamind.com/Eyeblaster.MediaMind.API.Doc/?v=3

Как я могу сделать это в командной строке? (Windows и / или Linux было бы полезно)

6   51   2012-09-01 01:19:51

6 ответов:

это стандартный, обычный веб-сервис SOAP. SSH здесь не при чем. Я только что назвал его с curl (шутка):

$ curl -X POST -H "Content-Type: text/xml" \
    -H "SOAPAction: \"http://api.eyeblaster.com/IAuthenticationService/ClientLogin\"" \
    --data-binary @request.xml \
    https://sandbox.mediamind.com/Eyeblaster.MediaMind.API/V2/AuthenticationService.svc

здесь request.xml файл имеет следующее содержание:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:api="http://api.eyeblaster.com/">
           <soapenv:Header/>
           <soapenv:Body>
              <api:ClientLogin>
                 <api:username>user</api:username>
                 <api:password>password</api:password>
                 <api:applicationKey>key</api:applicationKey>
              </api:ClientLogin>
          </soapenv:Body>
</soapenv:Envelope>

Я получаю этот красивый 500:

<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Body>
    <s:Fault>
      <faultcode>s:Security.Authentication.UserPassIncorrect</faultcode>
      <faultstring xml:lang="en-US">The username, password or application key is incorrect.</faultstring>
    </s:Fault>
  </s:Body>
</s:Envelope>

вы пробовали soapui?

подробнее

в командной строке Linux, вы можете просто выполнить:

curl -H "Content-Type: text/xml; charset=utf-8" -H "SOAPAction:"  -d @your_soap_request.xml -X POST https://ws.paymentech.net/PaymentechGateway

С помощью CURL:

USER='myusername'
PASSWORD='mypassword'
AUTHENTICATION="$USER:$PASSWORD"
URL='http://mysoapserver:8080/meeting/aws'
SOAPFILE=getCurrentMeetingStatus.txt
TIMEOUT=5

CURL запрос:

curl --user "${AUTHENTICATION}" --header 'Content-Type: text/xml;charset=UTF-8' --data @"${SOAPFILE}" "${URL}" --connect-timeout $TIMEOUT

Я использую это для проверки ответа:

http_code=$(curl --write-out "%{http_code}\n" --silent --user "${AUTHENTICATION}" --header 'Content-Type: text/xml;charset=UTF-8' --data @"${SOAPFILE}" "${URL}" --connect-timeout $TIMEOUT --output /dev/null)
if [[ $http_code -gt 400 ]];  # 400 and 500 Client and Server Error codes http://en.wikipedia.org/wiki/List_of_HTTP_status_codes
then
echo "Error: HTTP response ($http_code) getting URL: $URL"
echo "Please verify parameters/backend. Username: $USER Password: $PASSWORD Press any key to continue..."
read entervalue || continue
fi

Для Windows:

сохраните следующее как MSFT.vbs:

set SOAPClient = createobject("MSSOAP.SOAPClient")
SOAPClient.mssoapinit "https://sandbox.mediamind.com/Eyeblaster.MediaMind.API/V2/AuthenticationService.svc?wsdl"
WScript.Echo "MSFT = " & SOAPClient.GetQuote("MSFT")

затем из командной строки выполните команду:

C:\>MSFT.vbs

Ссылка:http://blogs.msdn.com/b/bgroth/archive/2004/10/21/246155.aspx

для Windows я нашел это работает:

Set http = CreateObject("Microsoft.XmlHttp")
http.open "GET", "http://www.mywebservice.com/webmethod.asmx?WSDL", FALSE
http.send ""
WScript.Echo http.responseText

ссылки: CodeProject

curl --header "Content-Type: text/xml;charset=UTF-8" --header "SOAPAction:ACTION_YOU_WANT_TO_CALL" --data @FILE_NAME URL_OF_THE_SERVICE 

выше команда была полезна для меня

пример

curl --header "Content-Type: text/xml;charset=UTF-8" --header "SOAPAction:urn:GetVehicleLimitedInfo" --data @request.xml http://11.22.33.231:9080/VehicleInfoQueryService.asmx 

Подробнее