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)

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


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

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

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>

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


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

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


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.