SOAP wsdl web servisleri komut satırından nasıl çağrılır


92

Https://sandbox.mediamind.com/Eyeblaster.MediaMind.API/V2/AuthenticationService.svc?wsdl adresine bir SOAP web hizmeti çağrısı yapmam ve şu parametreleri geçerken ClientLogin işlemini kullanmam gerekiyor: ApplicationKey, Password ve UserName . Yanıt, UserSecurityToken'dır. Bunların hepsi dizedir.

İşte ne yapmaya çalıştığımı tam olarak açıklayan bağlantı: https://sandbox.mediamind.com/Eyeblaster.MediaMind.API.Doc/?v=3

Bunu komut satırında nasıl yapabilirim? (Windows ve / veya Linux yardımcı olacaktır)

Yanıtlar:


146

Bu standart, sıradan bir SOAP web hizmetidir. SSH'nin burada yapacak bir şeyi yok. Sadece aradım (tek satır):

$ 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

Nerede request.xmldosyanın içeriği şu şekildedir:

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

Bu güzel 500'ü alıyorum:

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

Denedin mi ?

Daha fazla oku


6
Sabun tabanlı web hizmetleriyle çalışmak için çok kullanışlı ve ücretsiz bir araç olan +1 soapui. IMHO komut satırını kullanmaktan çok daha iyi.
Fuzzy Analysis

Hangi curl sürümünü kullanıyorsunuz? Benimki "Ana bilgisayar çözümlenemedi" --data-ikili "yazıyor ve bu https bir" Desteklenmeyen protokol ".
Marina

Yaptığınız şeyi tam olarak yaparsam, mediamind'den her zaman "Beklenmedik bir dahili sunucu hatası oluştu" diyen bir hata alırım. Yapmam gereken yanıta eklemediğiniz herhangi bir şey var mı (un / pw / key'i gerçek olanlarla değiştirmek dışında)?
Marina

@ Marina: Artık " 500 Dahili Sunucu Hatası " da alıyorum . Ancak bu bir sunucu tarafı hatası, bizim değil (?), WS sağlayıcısına neler olduğunu sorun. Birkaç gün önce çalışıyordu.
Tomasz Nurkiewicz

Cevabınız için teşekkürler. Request.xml dosyasında bir eksik / Zarf var ve bu, sunucudan bir hata yanıtına neden oluyor. Bir kez ekledim, iyi çalıştı. Belki de diğer insanların hata almasının sorunu budur.
apadana

24

Linux komut satırında, basitçe şunları yapabilirsiniz:

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

13

CURL kullanarak:

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

CURL isteği:

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

Yanıtı doğrulamak için bunu kullanıyorum:

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, linux kullanıcı adıma çözümlendi, komut dosyalarımda $ USER olarak değiştirildi
DmitrySandalov

12

İşte banka swift kodları için başka bir örnek CURL - SOAP ( WSDL ) isteği

İstek

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

Tepki

< 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, birkaç başlık satırını (başka bir -H) belirtmek için ve hepsinin tek bir konumda olması düzgün olduğu için. SAP bağlamında çalıştı.
til

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

Yukarıdaki komut benim için yardımcı oldu

Misal

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

Daha fazla bilgi


3

PowerShell alternatifi arayan Windows kullanıcıları için, işte burada (POST kullanarak). Okunabilirlik için birden çok satıra böldüm.

$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

Pencereler için:

Aşağıdakileri MSFT.vbs olarak kaydedin:

set SOAPClient = createobject("MSSOAP.SOAPClient")
SOAPClient.mssoapinit "https://sandbox.mediamind.com/Eyeblaster.MediaMind.API/V2/AuthenticationService.svc?wsdl"
WScript.Echo "MSFT = " & SOAPClient.GetQuote("MSFT")

Ardından bir komut isteminden şunu çalıştırın:

C:\>MSFT.vbs

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


1
Bu yıl 2004 tekniği en azından Pencere 7'de başarısız oldu.
Aram Paronikyan

2

Windows için bunu çalışırken buldum:

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

Referans: CodeProject

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.