Bagaimana melakukan panggilan layanan web SOAP wsdl dari baris perintah


92

Saya perlu melakukan panggilan webservice SOAP ke https://sandbox.mediamind.com/Eyeblaster.MediaMind.API/V2/AuthenticationService.svc?wsdl dan menggunakan operasi ClientLogin sambil melewati parameter: ApplicationKey, Password, dan UserName . Responsnya adalah UserSecurityToken. Semuanya adalah string.

Berikut ini tautan yang menjelaskan sepenuhnya apa yang saya coba lakukan: https://sandbox.mediamind.com/Eyeblaster.MediaMind.API.Doc/?v=3

Bagaimana saya bisa melakukan ini di baris perintah? (Windows dan / atau Linux akan membantu)

Jawaban:


146

Ini adalah layanan web standar SOAP biasa. SSH tidak ada hubungannya di sini. Saya baru saja menyebutnya dengan (satu baris):

$ 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

Di mana request.xmlfile memiliki konten berikut:

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

Saya mendapatkan 500 yang indah ini:

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

Sudahkah kamu mencoba ?

Baca lebih lajut


6
+1 soapui, alat yang sangat berguna dan gratis untuk bekerja dengan layanan web berbasis sabun. Jauh lebih baik daripada menggunakan IMHO baris perintah.
Analisis Fuzzy

Versi curl mana yang Anda gunakan? Milik saya mengatakan "Tidak dapat menyelesaikan host '--data-binary', dan https itu adalah" Protokol yang tidak didukung ".
Marina

Jika saya melakukan persis seperti yang Anda lakukan, maka saya selalu mendapatkan kesalahan dari mediamind yang mengatakan bahwa "Telah terjadi kesalahan server internal yang tidak terduga." Apakah ada hal yang tidak Anda masukkan dalam jawaban yang seharusnya saya lakukan (selain mengganti kunci un / pw / dengan yang asli)?
Marina

@Marina: sekarang saya juga mendapatkan " 500 Internal Server Error ". Namun ini adalah kesalahan sisi server, bukan milik kita (?), Tanyakan pada penyedia WS apa yang terjadi. Itu bekerja beberapa hari yang lalu.
Tomasz Nurkiewicz

Terima kasih atas jawaban anda. Ada / Amplop yang hilang di request.xml, menyebabkan respons kesalahan dari server. Setelah saya menambahkan bahwa itu berfungsi dengan baik. Mungkin itu masalah bagi orang lain yang mendapatkan kesalahan.
apadana

24

Pada baris perintah linux, Anda cukup menjalankan:

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

13

Menggunakan CURL:

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

Permintaan CURL:

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

Saya menggunakan ini untuk memverifikasi tanggapan:

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 memutuskan untuk nama pengguna linux saya, diubah menjadi $ USER di skrip saya
DmitrySandalov

12

Berikut adalah contoh permintaan CURL - SOAP ( WSDL ) lainnya untuk kode bank swift

Permintaan

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

Tanggapan

< 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 untuk menunjukkan beberapa baris tajuk (lain -H), dan karena rapi untuk memiliki semua di satu lokasi. Bekerja dalam konteks SAP.
Hingga

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

Perintah di atas sangat membantu saya

Contoh

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

Info lebih lanjut


3

Untuk pengguna Windows yang mencari alternatif PowerShell, ini dia (menggunakan POST). Saya telah membaginya menjadi beberapa baris agar mudah dibaca.

$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

Untuk Windows saya menemukan ini berfungsi:

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

Referensi: CodeProject

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.