2012-08-31 4 views
41

Potrzebuję wykonać wywołanie usługi SOAP do usługi WWW https://sandbox.mediamind.com/Eyeblaster.MediaMind.API/V2/AuthenticationService.svc?wsdl i użyć operacji ClientLogin podczas przechodzenia przez parametry: ApplicationKey, hasło i nazwa użytkownika. Odpowiedzią jest UserSecurityToken. Wszystkie są strunami.Jak wykonać wywołanie usługi WWW wsdl SOAP z wiersza polecenia

Oto link pełni wyjaśniając, co próbuję zrobić: https://sandbox.mediamind.com/Eyeblaster.MediaMind.API.Doc/?v=3

jaki sposób można zrobić to w wierszu polecenia? (Windows i/lub Linux byłyby pomocne)

Odpowiedz

77

To standardowa, zwykła usługa sieciowa SOAP. SSH nie ma tu nic do roboty. I właśnie nazwał go z (one-liner):

$ 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 

Gdzie request.xml plik ma następującą zawartość:

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

otrzymuję ten piękny 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> 

próbowałeś ?

Read more

+3

+1 soapui, bardzo przydatne i darmowe narzędzie do pracy z usługami sieciowymi opartymi na mydłach.Znacznie lepiej niż przy użyciu linii poleceń IMHO. – fuzzyanalysis

+0

Którą wersję curl używasz? Mine mówi "Nie udało się rozwiązać hosta" - data-binary ", a https jest" nieobsługiwanym protokołem ". – Marina

+0

Jeśli zrobię dokładnie to, co zrobiłeś, to zawsze otrzymuję błąd od mediamind, który mówi, że" Nieoczekiwany wewnętrzny Wystąpił błąd serwera. "Czy jest coś, czego nie uwzględniłeś w odpowiedzi, którą powinienem wykonać (oprócz zastąpienia klucza un/pw/prawdziwymi)? – Marina

2

W systemie Windows:

zapisać następujące jak 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") 

Następnie z wiersza polecenia, uruchom:

C:\>MSFT.vbs 

referencyjny: http://blogs.msdn.com/b/bgroth/archive/2004/10/21/246155.aspx

+1

W tym roku technika 2004 zawodzi przynajmniej w oknie 7. –

+0

Wypróbuj Powershell. – fuzzyanalysis

2

użyłem tego używając CURL Prośba

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

Zwijanie:

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

Używam tego celu sprawdzenia reakcji:

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 
+1

$ USERNAME rozpatruje moją nazwę użytkownika, zmienioną na $ USER w moich skryptach – DmitrySandalov

7

W linii poleceń Linuksa, można po prostu wykonać:

curl -H "Content-Type: text/xml; charset=utf-8" -H "SOAPAction:" -d @your_soap_request.xml -X POST https://ws.paymentech.net/PaymentechGateway 
1
curl --header "Content-Type: text/xml;charset=UTF-8" --header "SOAPAction:ACTION_YOU_WANT_TO_CALL" --data @FILE_NAME URL_OF_THE_SERVICE 

Powyższe polecenie było pomocne dla mnie

Przykład

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

More info

1

Dla Windows Znalazłem robocza:

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

referencyjny: CodeProject