Jak wywołać usługi WWW SOAP wsdl z wiersza poleceń

92

Muszę wykonać wywołanie usługi sieciowej SOAP pod adresem https://sandbox.mediamind.com/Eyeblaster.MediaMind.API/V2/AuthenticationService.svc?wsdl i użyć operacji ClientLogin podczas przekazywania parametrów: ApplicationKey, Password i UserName . Odpowiedź to UserSecurityToken. Wszystkie są sznurkami.

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

Jak mogę to zrobić w linii poleceń? (Windows i / lub Linux byłby pomocny)

przystań
źródło

Odpowiedzi:

146

To standardowa, zwykła usługa sieciowa SOAP. SSH nie ma tu nic do roboty. Właśnie zadzwoniłem z (jednowierszowy):

$ 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.xmlplik 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>

Dostaję tę piękną 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>

Czy próbowałeś ?

Czytaj więcej

Tomasz Nurkiewicz
źródło
6
+1 soapui, bardzo przydatne i darmowe narzędzie do pracy z serwisami internetowymi opartymi na mydle. Znacznie lepsze niż używanie IMHO z wiersza poleceń.
Analiza rozmyta
Której wersji curl używasz? Mój mówi: „Nie można rozpoznać hosta '--data-binary' i że https jest„ nieobsługiwanym protokołem ”.
Marina
Jeśli zrobię dokładnie to, co zrobiłeś, zawsze otrzymuję błąd od mediamind, który mówi, że „Wystąpił nieoczekiwany wewnętrzny błąd serwera”. Czy jest coś, czego nie zawarłeś w odpowiedzi, którą powinienem zrobić (poza wymianą klucza un / pw / na prawdziwe)?
Marina
@Marina: teraz również otrzymuję komunikat „ 500 Internal Server Error ”. Jednak jest to błąd po stronie serwera, a nie nasz (?), Zapytaj dostawcę WS, co się dzieje. Działało kilka dni temu.
Tomasz Nurkiewicz
Dzięki za odpowiedź. Brakuje / Envelope w request.xml, powodując odpowiedź błędu z serwera. Kiedyś dodałem, że działa dobrze. Może to jest problem dla innych ludzi, którzy otrzymują błędy.
apadana
24

W linii poleceń Linuksa możesz 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
linuxeasy
źródło
13

Korzystanie z CURL:

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

Żądanie CURL:

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

Używam tego do weryfikacji odpowiedzi:

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
źródło
2
$ USERNAME przekształca się w moją nazwę użytkownika w
systemie
12

Oto kolejne przykładowe żądanie CURL - SOAP ( WSDL ) dla szybkich kodów bankowych

Żądanie

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

Odpowiedź

< 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
źródło
1
+1 do wskazania kilku wierszy nagłówka (inny -H), i ponieważ fajnie jest mieć wszystko w jednym miejscu. Pracował w kontekście SAP.
do
5
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 dla mnie pomocne

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 

Więcej informacji

Techie
źródło
3

Dla użytkowników systemu Windows szukających alternatywy dla PowerShell, oto jest (używając POST). Dla większej czytelności podzieliłem to na wiele wierszy.

$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
źródło
2

Dla Windowsa:

Zapisz następujące pliki jako 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

Źródła: http://blogs.msdn.com/b/bgroth/archive/2004/10/21/246155.aspx

Analiza rozmyta
źródło
1
W tym roku technika 2004 zawodziła przynajmniej w Windows 7.
Aram Paronikyan
2

W systemie Windows znalazłem to działające:

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

Odniesienie: CodeProject

Aram Paronikyan
źródło