วิธีการเรียกใช้บริการเว็บ SOAP wsdl จากบรรทัดคำสั่ง


92

ฉันต้องการเรียกใช้ SOAP webservice ไปที่https://sandbox.mediamind.com/Eyeblaster.MediaMind.API/V2/AuthenticationService.svc?wsdlและเพื่อใช้การดำเนินการ ClientLogin ในขณะที่ส่งผ่านพารามิเตอร์: ApplicationKey, Password และ UserName . การตอบสนองคือ UserSecurityToken พวกเขาทั้งหมดเป็นสตริง

นี่คือลิงค์ที่อธิบายอย่างละเอียดว่าฉันพยายามทำอะไร: https://sandbox.mediamind.com/Eyeblaster.MediaMind.API.Doc/?v=3

ฉันจะทำสิ่งนี้ในบรรทัดคำสั่งได้อย่างไร (Windows และ / หรือ Linux จะเป็นประโยชน์)

คำตอบ:


146

เป็นบริการเว็บ 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 เครื่องมือที่มีประโยชน์และไม่เสียค่าใช้จ่ายสำหรับการทำงานกับบริการเว็บที่ใช้สบู่ ดีกว่าการใช้บรรทัดคำสั่ง IMHO
Fuzzy Analysis

คุณใช้ curl รุ่นไหน Mine พูดว่า "ไม่สามารถแก้ไขโฮสต์" - ข้อมูลไบนารี "ได้และ https นั้นเป็น" โปรโตคอลที่ไม่รองรับ "
Marina

ถ้าฉันทำตามที่คุณทำทุกอย่างฉันมักจะได้รับข้อผิดพลาดจากสื่อกลางที่แจ้งว่า "เกิดข้อผิดพลาดภายในเซิร์ฟเวอร์ที่ไม่คาดคิด" มีสิ่งใดบ้างที่คุณไม่ได้ระบุไว้ในคำตอบที่ฉันควรทำ (นอกเหนือจากการแทนที่คีย์ un / pw / ด้วยของจริง)
Marina

@ มาริน่า: ตอนนี้ฉันได้รับ " 500 Internal Server Error " เช่นกัน อย่างไรก็ตามนี่เป็นข้อผิดพลาดฝั่งเซิร์ฟเวอร์ไม่ใช่ของเรา (?) ให้ถามผู้ให้บริการ WS ว่าเกิดอะไรขึ้น มันใช้งานได้ไม่กี่วันที่ผ่านมา
Tomasz Nurkiewicz

ขอบคุณสำหรับคำตอบ. มี / ซองจดหมายที่ขาดหายไปใน request.xml ทำให้เกิดข้อผิดพลาดในการตอบสนองจากเซิร์ฟเวอร์ เมื่อฉันเพิ่มว่ามันทำงานได้ดี บางทีนั่นอาจเป็นปัญหาสำหรับคนอื่น ๆ ที่ได้รับข้อผิดพลาด
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

13

ใช้ 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 แก้ไขเป็นชื่อผู้ใช้ linux ของฉันเปลี่ยนเป็น $ 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

สำหรับผู้ใช้ Windows ที่กำลังมองหาทางเลือก PowerShell นี่คือ (โดยใช้ 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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.