So führen Sie einen SOAP-WSDL-Webdienstaufruf über die Befehlszeile durch

89

Ich muss einen SOAP-Webservice-Aufruf an https://sandbox.mediamind.com/Eyeblaster.MediaMind.API/V2/AuthenticationService.svc?wsdl durchführen und die Operation ClientLogin verwenden, während ich die Parameter ApplicationKey, Password und UserName durchlaufe . Die Antwort lautet UserSecurityToken. Sie sind alle Saiten.

Hier ist der Link, der ausführlich erklärt, was ich versuche: https://sandbox.mediamind.com/Eyeblaster.MediaMind.API.Doc/?v=3

Wie kann ich das in der Kommandozeile machen? (Windows und / oder Linux wären hilfreich)

Yachthafen
quelle

Antworten:

145

Es ist ein normaler SOAP-Webdienst. SSH hat hier nichts zu tun. Ich habe es gerade mit genannt (Einzeiler):

$ 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

Wobei die request.xmlDatei den folgenden Inhalt hat:

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

Ich bekomme diese schönen 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>

Hast du es versucht ?

Weiterlesen

Tomasz Nurkiewicz
quelle
5
+1 soapui, ein sehr nützliches und kostenloses Tool für die Arbeit mit seifenbasierten Webdiensten. Viel besser als die Kommandozeile IMHO zu benutzen.
Fuzzy-Analyse
Welche Version von Curl verwenden Sie? Meins sagt "Host '--data-binary' konnte nicht aufgelöst werden, und https ist ein" nicht unterstütztes Protokoll ".
Marina
Wenn ich genau das tue, was Sie getan haben, erhalte ich immer einen Fehler von mediamind, der besagt, dass "ein unerwarteter interner Serverfehler aufgetreten ist". Gibt es etwas, das Sie nicht in die Antwort aufgenommen haben, die ich tun sollte (außer um das un / pw / key durch das echte zu ersetzen)?
Marina
@Marina: Jetzt bekomme ich auch " 500 Internal Server Error ". Dies ist jedoch ein serverseitiger Fehler, nicht unser (?). Fragen Sie den WS-Anbieter, was passiert. Es hat vor ein paar Tagen funktioniert.
Tomasz Nurkiewicz
Danke für deine Antwort. In request.xml fehlt ein / Envelope, der eine Fehlerantwort vom Server verursacht. Einmal habe ich hinzugefügt, dass es gut funktioniert hat. Vielleicht ist das das Problem für andere Leute, die Fehler bekommen.
Apadana
21

In der Linux-Befehlszeile können Sie einfach Folgendes ausführen:

curl -H "Content-Type: text/xml; charset=utf-8" -H "SOAPAction:"  -d @your_soap_request.xml -X POST https://ws.paymentech.net/PaymentechGateway
Linuxeasy
quelle
Der Befehl gibt nichts aus.
OrangePot
12

Verwenden von CURL:

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

CURL-Anfrage:

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

Ich benutze dies, um die Antwort zu überprüfen:

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: $SOAP_USER Password: $PASSWORD Press any key to continue..."
read entervalue || continue
fi
Gogasca
quelle
2
$ USERNAME wird in meinen Linux-Benutzernamen aufgelöst und in meinen Skripten in $ USER geändert
DmitrySandalov
11

Hier ist ein weiteres Beispiel für eine CURL-SOAP- Anforderung ( WSDL ) für Bank- Swift-Codes

Anfrage

curl -X POST http://www.thomas-bayer.com/axis2/services/BLZService \
  -H 'Content-Type: text/xml' \
  -H 'SOAPAction: blz:getBank' \
  -d '
  <soapenv:Envelope 
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:blz="http://thomas-bayer.com/blz/">
    <soapenv:Header/>
    <soapenv:Body>
      <blz:getBank>
        <blz:blz>10020200</blz:blz>
      </blz:getBank>
    </soapenv:Body>
  </soapenv:Envelope>'

Antwort

< HTTP/1.1 200 OK
< Server: Apache-Coyote/1.1
< Content-Type: text/xml;charset=UTF-8
< Date: Tue, 26 Mar 2019 08:14:59 GMT
< Content-Length: 395
< 
<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope
  xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Body>
    <ns1:getBankResponse
      xmlns:ns1="http://thomas-bayer.com/blz/">
      <ns1:details>
        <ns1:bezeichnung>BHF-BANK</ns1:bezeichnung>
        <ns1:bic>BHFBDEFF100</ns1:bic>
        <ns1:ort>Berlin</ns1:ort>
        <ns1:plz>10117</ns1:plz>
      </ns1:details>
    </ns1:getBankResponse>
  </soapenv:Body>
</soapenv:Envelope>
bmatovu
quelle
1
+1 für die Angabe mehrerer Kopfzeilen (eine weitere -H) und da es ordentlich ist, alle an einem Ort zu haben. Arbeitete im SAP-Kontext.
bis zum
5
curl --header "Content-Type: text/xml;charset=UTF-8" --header "SOAPAction:ACTION_YOU_WANT_TO_CALL" --data @FILE_NAME URL_OF_THE_SERVICE 

Der obige Befehl war hilfreich für mich

Beispiel

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

Mehr Info

Technikfreak
quelle
2

Für Windows:

Speichern Sie Folgendes als 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")

Führen Sie dann an einer Eingabeaufforderung Folgendes aus:

C:\>MSFT.vbs

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

Fuzzy-Analyse
quelle
1
In diesem Jahr schlägt die Technik 2004 zumindest unter Windows 7 fehl.
Aram Paronikyan
2

Für Windows fand ich das funktionierend:

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

Referenz: CodeProject

Aram Paronikyan
quelle
2

Für Windows-Benutzer, die nach einer PowerShell-Alternative suchen, hier (mit POST). Ich habe es zur besseren Lesbarkeit in mehrere Zeilen aufgeteilt.

$url = 'https://sandbox.mediamind.com/Eyeblaster.MediaMind.API/V2/AuthenticationService.svc'
$headers = @{
    'Content-Type' = 'text/xml';
    'SOAPAction' = 'http://api.eyeblaster.com/IAuthenticationService/ClientLogin'
}
$envelope = @'
    <Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
        <Body>
            <yourEnvelopeContentsHere/>
        </Body>
    </Envelope>
'@     # <--- This line must not be indented

Invoke-WebRequest -Uri $url -Headers $headers -Method POST -Body $envelope
JamesQMurphy
quelle