2012-07-12 3 views
11

저는 SOAP와 XML을 처음 접했습니다. 많은 튜토리얼을 읽었지만 아무것도 명확하지 않습니다.SOAP 요청을 어떻게 보내십니까?

나는 혼란 스럽다. 단지 SOAP 요청을 어떻게 보내는가? 이 작업을 시도한 방법은 SOAP 요청을 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> 
내가 무엇을 대가로 얻을 것은 없다는 오류 메시지입니다

가 전송 될 때까지 그때 위해 브라우저 파일 (testRequest.xml)를 엽니 다

.. : XML이 오류를 구문 분석을 : 구문 오류 위치 : 로컬 호스트/프로젝트/test.xml의 라인 번호 1, 열 1 : POST /MobileCashPayout.asmx HTTP/1.1 ^

내가 길을 잘못 보내는 건가요? 도와주세요.

+0

XML 콘텐츠는'

답변

13

브라우저에서이 문서를 여는 것은 요청을 보내지 않습니다. 당신은 몇 가지 옵션이 있습니다

  • 어떤 친숙한 언어로 약간의 스크립트를 작성할를, 스크립트는 지정된 서버에 연결하고 그렇게하기 위해 기존 프로그램의 일부를 사용하여 메시지
  • 을에서 언급 한 바와 같이 몸과 POST 요청을 보내야합니다 당신을 위해

당신이 경험이 없다면 나는 확실히 두 번째 옵션을 권합니다. 개인적으로 가장 좋아하는 것은 SoapUI입니다 (here 참조).

+0

감사합니다. 저는 PHP에 대해 매우 잘 알고 있습니다. 그래도 몇 가지 지침이 필요합니다. 비누 UI는 SoapUI가 WSDL/WADL을 사용하고 필수 XML을 사용하지 않기 때문에 실제로 도움이되지 않습니다. 어떤 지침? – SirBT

+1

네가 맞아, SoapUI는 웹 서비스에 대한 정의가 필요하다. 웹 서비스는 대개 .wsdl 파일 (WSDL = 웹 서비스 설명 언어)에 정의되어 있으므로 호출해야하는 MobileCashPayout 서비스의 wsdl 만 있으면됩니다. 아마도 /MobileCashPayout.asmx?wsdl (여기에서 을 서비스가있는 실제 URL로 대체)을 입력하면 찾을 수 있습니다. 성공하면 알려주세요. –

+0

나는 당신의 솔루션을 시도했지만, – SirBT

1

내가 아는 한 브라우저에서 비누 요청을 보낼 수 없습니다. 나는 Soap UI

같은 도구를 사용하여 청강을 요청합니다.

+0

Soap UI에 나를 소개했기 때문에 회신을 보내 주셔서 감사합니다. 문제는 위의 초기 SOAP 코드가 XML로 작성되고 WSDL/WADL로 작성되지 않는다는 것입니다. 비누 UI는 필수 XML이 아닌 WSDL/WADL을 사용합니다. 어떤 아이디어? – SirBT

+0

SOAP UI는 XML 형식화되고 편집 가능한 요청을 지원하며 XML 형식화 된 응답을 제공합니다. XML을 복사하여 SOAP 요청 창에 붙여 넣을 수 있습니다. – lubosdz

6

이 블로그 게시물은 나를 도왔습니다. 리눅스에 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, 링크 전용 답변이므로 링크가 더 이상 존재하지 않을 수 있으므로 링크의 필수 세부 정보/코드를 포함해야합니다! –

+0

블로그의 코드가 복사되었습니다. – JohnMudd

+2

이제 좋은 대답처럼 보입니다! –

2

당신은 비누 XML을 보낼 curl을 사용할 수 있습니다. 그 방법은 다음과 같습니다

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 

만든 testRequest.xml 파일을 사용하면 다음

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 

전체 과정을 설명하는 link입니다 수 있습니다.

+0

나는 항상 곱슬 곱슬 함을 좋아할 것이다. 단순한. –

관련 문제