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)

Marina
sumber

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

Tomasz Nurkiewicz
sumber
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
linuxeasy
sumber
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
gogasca.dll
sumber
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>
bmatovu.dll
sumber
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

Techie
sumber
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
JamesQMurphy
sumber
2

Untuk Windows:

Simpan berikut ini sebagai 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")

Kemudian dari prompt perintah, jalankan:

C:\>MSFT.vbs

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

Analisis Fuzzy
sumber
1
Teknik tahun 2004 ini gagal setidaknya di Window 7.
Aram Paronikyan
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

Aram Paronikyan
sumber