Cách thực hiện cuộc gọi dịch vụ web SOAP wsdl từ dòng lệnh


92

Tôi cần thực hiện cuộc gọi dịch vụ web SOAP tới https://sandbox.mediamind.com/Eyeblaster.MediaMind.API/V2/AuthenticationService.svc?wsdl và sử dụng hoạt động ClientLogin trong khi chuyển qua các tham số: ApplicationKey, Password và UserName . Phản hồi là UserSecurityToken. Chúng đều là chuỗi.

Đây là liên kết giải thích đầy đủ những gì tôi đang cố gắng thực hiện: https://sandbox.mediamind.com/Eyeblaster.MediaMind.API.Doc/?v=3

Làm cách nào để thực hiện việc này trên dòng lệnh? (Windows và / hoặc Linux sẽ hữu ích)

Câu trả lời:


146

Đó là một dịch vụ web SOAP thông thường, tiêu chuẩn. SSH không có gì để làm ở đây. Tôi vừa gọi nó bằng (lót):

$ 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

Nơi request.xmltệp có các nội dung sau:

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

Tôi nhận được 500 tuyệt đẹp này:

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

Bạn đã thử chưa ?

Đọc thêm


6
+1 soapui, một công cụ rất hữu ích và miễn phí để làm việc với các dịch vụ web dựa trên xà phòng. Tốt hơn nhiều so với sử dụng dòng lệnh IMHO.
Phân tích mờ

Bạn đang sử dụng phiên bản tóc xoăn nào? Của tôi nói "Không thể phân giải máy chủ lưu trữ '--data-binary' và https là một" Giao thức không được hỗ trợ ".
Marina

Nếu tôi làm đúng như những gì bạn đã làm, thì tôi luôn nhận được lỗi từ người trung gian thông báo rằng "Đã xảy ra lỗi máy chủ nội bộ không mong muốn". Có điều gì mà bạn không đưa vào câu trả lời mà tôi nên làm (ngoài việc thay thế phím un / pw / bằng những phím thật) không?
Bến du thuyền

@Marina: bây giờ tôi cũng nhận được " Lỗi máy chủ nội bộ 500 ". Tuy nhiên đây là lỗi phía máy chủ, không phải của chúng tôi (?), Hãy hỏi nhà cung cấp WS điều gì đang xảy ra. Nó đã hoạt động vài ngày trước.
Tomasz Nurkiewicz

Cảm ơn câu trả lời của bạn. Thiếu / Phong bì trong request.xml, gây ra phản hồi lỗi từ máy chủ. Một khi tôi nói thêm rằng nó hoạt động tốt. Có lẽ đó là vấn đề cho những người khác nhận được lỗi.
apadana

24

Trên dòng lệnh linux, bạn chỉ cần thực hiện:

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

13

Sử dụng CURL:

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

Yêu cầu CURL:

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

Tôi sử dụng cái này để xác minh phản hồi:

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 giải quyết tên người dùng linux của tôi, thay đổi đến $ USER trong kịch bản của tôi
DmitrySandalov

12

Đây là một mẫu yêu cầu CURL - SOAP ( WSDL ) khác cho mã nhanh ngân hàng

Yêu cầu

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

Phản ứng

< 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 để chỉ ra một số dòng tiêu đề (một H khác) và vì nó rất gọn gàng để có tất cả ở một vị trí. Làm việc trong bối cảnh SAP.
cho đến

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

Lệnh trên rất hữu ích cho tôi

Thí dụ

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

Thêm thông tin


3

Đối với người dùng Windows đang tìm kiếm một giải pháp thay thế PowerShell, đây là (sử dụng POST). Tôi đã chia nó thành nhiều dòng để dễ đọc.

$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

Cho cửa sổ:

Lưu phần sau dưới dạng 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")

Sau đó, từ dấu nhắc lệnh, hãy chạy:

C:\>MSFT.vbs

Tham khảo: http://blogs.msdn.com/b/bgroth/archive/2004/10/21/246155.aspx


1
Kỹ thuật năm 2004 này ít nhất không thành công trên Window 7.
Aram Paronikyan

2

Đối với Windows, tôi thấy điều này hoạt động:

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

Tham khảo: CodeProject

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.