명령 줄에서 SOAP wsdl 웹 서비스 호출을 수행하는 방법


93

https://sandbox.mediamind.com/Eyeblaster.MediaMind.API/V2/AuthenticationService.svc?wsdl에 대한 SOAP 웹 서비스 호출을 수행하고 매개 변수 (ApplicationKey, Password 및 UserName)를 전달하는 동안 ClientLogin 작업을 사용해야합니다. . 응답은 UserSecurityToken입니다. 그들은 모두 문자열입니다.

다음은 내가하려는 작업을 자세히 설명하는 링크입니다. https://sandbox.mediamind.com/Eyeblaster.MediaMind.API.Doc/?v=3

명령 줄에서 어떻게 할 수 있습니까? (Windows 및 / 또는 Linux가 도움이 될 것입니다)

답변:


147

표준의 일반적인 SOAP 웹 서비스입니다. SSH는 여기서 할 일이 없습니다. 나는 그것을 (짧막 한 농담):

$ 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

어디 request.xml파일에는 다음과 같은 내용이 있습니다 :

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

이 아름다운 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>

시도해 보셨습니까 ?

더 읽어보기


6
+1 soapui, SOAP 기반 웹 서비스 작업을위한 매우 유용하고 무료 도구입니다. IMHO 명령 줄을 사용하는 것보다 훨씬 낫습니다.
퍼지 분석

어떤 버전의 컬을 사용하고 있습니까? Mine은 " '--data-binary'호스트를 확인할 수 없으며 해당 https는"지원되지 않는 프로토콜 "입니다.
Marina

내가 당신이 한 일을 정확히한다면 항상 "예기치 않은 내부 서버 오류가 발생했습니다."라는 오류가 mediamind에서 발생합니다. 내가해야 할 대답에 포함하지 않은 것이 있습니까 (un / pw / key를 실제 키로 대체하는 것 외에)?
Marina

@Marina : 이제 " 500 내부 서버 오류 "도 표시됩니다. 그러나 이것은 우리의 오류 (?)가 아니라 서버 측 오류입니다. WS 제공자에게 무슨 일이 일어나고 있는지 물어보십시오. 며칠 전에 작동했습니다.
토마스 Nurkiewicz

답변 해 주셔서 감사합니다. request.xml에 누락 된 / Envelope가있어 서버에서 오류 응답이 발생합니다. 내가 추가하면 잘 작동했습니다. 아마도 그것은 다른 사람들이 오류를 얻는 문제 일 것입니다.
apadana

24

Linux 명령 줄에서는 다음을 간단히 실행할 수 있습니다.

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

14

CURL 사용 :

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

CURL 요청 :

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

나는 이것을 사용하여 응답을 확인합니다.

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의 결의는, 내 스크립트에서 $ USER로 변경
DmitrySandalov

12

다음은 은행 신속한 코드에 대한 또 다른 샘플 CURL-SOAP ( WSDL ) 요청입니다.

의뢰

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

응답

< 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은 여러 헤더 행 (다른 -H)을 나타내며 모두 한 위치에있는 것이 깔끔합니다. SAP 컨텍스트에서 작업했습니다.
까지

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

위의 명령이 도움이되었습니다.

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

더 많은 정보


3

PowerShell 대안을 찾는 Windows 사용자의 경우 여기에 있습니다 (POST 사용). 가독성을 위해 여러 줄로 나누었습니다.

$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

Windows의 경우 :

다음을 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")

그런 다음 명령 프롬프트에서 다음을 실행합니다.

C:\>MSFT.vbs

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


1
올해 2004 기술은 적어도 Window 7에서 실패합니다.
Aram Paronikyan 2015 년

2

Windows의 경우 다음과 같이 작동합니다.

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

참조 : CodeProject

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.