2012-07-12 35 views
11

Tôi mới sử dụng SOAP và xml. Tôi đã đọc một số hướng dẫn nhưng không có gì rõ ràng là đủ.làm cách nào để gửi yêu cầu SOAP?

Tôi rất bối rối, Chỉ cần làm thế nào để gửi yêu cầu SOAP? Cách tôi đã cố gắng làm điều này là bằng cách lưu yêu cầu SOAP của tôi (như được thấy bên dưới) là: testRequest.xml.

POST /MobileCashPayout.asmx HTTP/1.1 
Host: 192.168.1.80 
Content-Type: application/soap+xml; charset=utf-8 
Content-Length: length 
<?xml version="1.0" encoding="utf-8"?> 
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> 
<soap12:Body> 
<Payout xmlns="http://www.mycel.com/"> 
<Username>string</Username> 
<Password>string</Password> 
<referenceID>string</referenceID> 
<sourceMsisdn>string</sourceMsisdn> 
<destMsisdn>string</destMsisdn> 
<Amount>decimal</Amount> 
<MobilePin>string</MobilePin> 
<cashInformation>string</cashInformation> 
<merchantName>string</merchantName> 
</Payout> 
</soap12:Body> 
</soap12:Envelope> 

sau đó tôi mở file (testRequest.xml) với một trình duyệt để cho nó được gửi đi ..

những gì tôi nhận được lại là một thông báo lỗi: XML Parsing Error: cú pháp lỗi Location: localhost/dự án/test.xml Dòng số 1, Cột 1: POST /MobileCashPayout.asmx HTTP/1,1 ^

tôi gửi nó một cách sai lầm? Xin hãy giúp tôi?

+0

Nội dung XML bắt đầu bằng '

Trả lời

13

Mở tài liệu này trong trình duyệt sẽ không gửi yêu cầu. Bạn có một vài lựa chọn:

  • viết một kịch bản ít trong bất kỳ ngôn ngữ quen thuộc, kịch bản nên kết nối đến máy chủ định và gửi một yêu cầu POST với một cơ thể như đã đề cập trong thông điệp của bạn
  • sử dụng một số chương trình hiện có để làm điều đó cho bạn

Nếu bạn không có kinh nghiệm, tôi chắc chắn sẽ đề xuất tùy chọn thứ hai. Yêu thích cá nhân của tôi là SoapUI, xem here.

+0

Cảm ơn bạn, tôi rất quen thuộc với PHP. Tôi sẽ cần một số hướng dẫn mặc dù. Soap UI không thực sự hữu ích vì SoapUI sử dụng WSDL/WADL và không phải là xml yêu cầu. Bất kỳ hướng dẫn nào? – SirBT

+1

Bạn nói đúng, SoapUI yêu cầu định nghĩa dịch vụ Web mà bạn muốn sử dụng. Các dịch vụ Web thường được định nghĩa trong các tệp .wsdl (WSDL = Ngôn ngữ mô tả dịch vụ Web), vì vậy tất cả những gì bạn cần là một dịch vụ WSDl của dịch vụ MobileCashPayout mà bạn đang gọi. Hầu hết có thể, nó có thể được tìm thấy nếu bạn nhập /MobileCashPayout.asmx?wsdl (nơi bạn thay thế bằng URL thực tế nơi dịch vụ được đặt). Vui lòng cho tôi biết nếu bạn đã thành công. –

+0

Tôi đã thử giải pháp của bạn nhưng, có được – SirBT

1

Bạn không thể gửi yêu cầu xà phòng khi trình duyệt theo như tôi biết. Tôi đề xuất bạn sử dụng công cụ như Soap UI

để gửi yêu cầu.

+0

Cảm ơn bạn, câu trả lời của bạn rất sâu sắc bởi vì bạn đã giới thiệu tôi với giao diện người dùng Soap. Vấn đề là mã SOAP ban đầu ở trên được viết bằng XML chứ không phải trong WSDL/WADL. Soap UI sử dụng WSDL/WADL chứ không phải XML yêu cầu. Bất kỳ ý tưởng? – SirBT

+0

SOAP UI hỗ trợ các yêu cầu có thể chỉnh sửa và chỉnh sửa XML và cung cấp các câu trả lời được định dạng XML. Bạn có thể sao chép và dán XML của bạn vào cửa sổ yêu cầu SOAP. – lubosdz

6

Bài đăng trên blog này đã giúp tôi. Python SOAP Request using Requests

#!/usr/bin/env python 
# encoding: utf-8 

import requests 
from XML import XML 

request = u"""<?xml version="1.0" encoding="utf-8"?> 
       <soapenv:envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://www.webserviceX.NET/"> 
        <soapenv:header> 
        <soapenv:body> 
         <web:conversionrate> 
          <web:fromcurrency>GBP</web:fromcurrency> 
          <web:tocurrency>CHF</web:tocurrency> 
         </web:conversionrate> 
        </soapenv:body> 
       </soapenv:header></soapenv:envelope>""" 

encoded_request = request.encode('utf-8') 

headers = {"Host": "www.webservicex.net", 
      "Content-Type": "text/xml; charset=UTF-8", 
      "Content-Length": len(encoded_request)} 

response = requests.post(url="http://www.webservicex.net/CurrencyConvertor.asmx", 
         headers = headers, 
         data = encoded_request, 
         verify=False) 

print unicode(XML(response.text)) 
+0

FYI, đó là liên kết chỉ trả lời, phải bao gồm các chi tiết cần thiết/mã từ liên kết của mình bởi vì liên kết có thể không còn tồn tại trong tương lai! –

+0

Đã sao chép mã từ blog. – JohnMudd

+2

Bây giờ nó trông giống như một câu trả lời hay! –

2

Trên Linux, bạn có thể sử dụng curl để gửi xml xà phòng. Dưới đây là làm thế nào để làm điều đó:

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

Sử dụng testRequest.xml tập tin được tạo ra, bạn có thể

curl --header "Content-Type: text/xml;charset=UTF-8" --header "SOAPAction: ACTION_YOU_WANT_TO_CALL" --data @testRequest.xml URL_OF_THE_SOAP_WEB_SERVICE_ENDPOINT 

Đây là một link mô tả quá trình đầy đủ.

+0

Tôi sẽ luôn luôn như curl. Đơn giản. –

Các vấn đề liên quan