2012-07-12 31 views
11

Soy nuevo en SOAP y xml. Leí varios tutoriales, pero nada parece ser lo suficientemente claro.¿cómo se envía una solicitud SOAP?

Estoy confundido, ¿cómo se envía una solicitud SOAP? La forma en que he intentado hacer esto es guardando mi solicitud SOAP (como se ve a continuación) como: 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> 

entonces abro el archivo (testRequest.xml) con un navegador con el fin de que sea enviado ..

lo que recibo a cambio es un mensaje de error que indica: análisis XML error: Sintaxis error Ubicación: localhost/proyectos/test.xml línea número 1, columna 1: Enviar /MobileCashPayout.asmx HTTP/1,1 ^

yo os envío el camino equivocado? Por favor, ¿me ayudas?

+0

El contenido XML comienza con '

Respuesta

13

Al abrir este documento en el navegador no se enviará una solicitud. Tiene varias opciones:

  • escribir un pequeño script en cualquier lenguaje familiar, la escritura debe conectarse al servidor especificado y enviar una solicitud POST con un cuerpo como se mencionó en su mensaje
  • utilizar algunos de los programas existentes para hacer eso para usted

Si no tiene experiencia, definitivamente recomendaría una segunda opción. Mi favorito personal es SoapUI, vea here.

+0

Gracias, estoy muy familiarizado con PHP. Sin embargo, necesitaría algunas pautas. La interfaz de usuario de Soap realmente no ayuda porque SoapUI usa WSDL/WADL y no el xml requerido. ¿Alguna guía? – SirBT

+1

Tiene razón, SoapUI requiere una definición de servicio web que desea usar. Los servicios web generalmente se definen en archivos .wsdl (WSDL = Lenguaje de descripción de servicios web), por lo que lo único que necesita es un wsdl del servicio MobileCashPayout al que está llamando. Probablemente, se puede encontrar si escribe /MovilCashPayout.asmx ?wsdl (donde reemplaza con la URL real donde se encuentra el servicio). Por favor, avíseme si tuvo éxito. –

+0

Intenté su solución pero, obtenga un – SirBT

1

No se puede enviar una solicitud de jabón cuando un navegador hasta donde yo sé. Propongo que utilice una herramienta como Soap UI

para enviar una solicitud.

+0

Gracias, su respuesta fue perspicaz porque me presentó a la interfaz de usuario de Soap. El problema es que el código SOAP inicial anterior está escrito en XML y no en WSDL/WADL. La interfaz de usuario de Soap usa WSDL/WADL y no el XML requerido. ¿Algunas ideas? – SirBT

+0

SOAP UI admite solicitudes formateadas y editables XML y proporciona respuestas formateadas XML. Puede copiar y pegar su XML en la ventana de solicitud de SOAP. – lubosdz

6

Esta publicación del blog me ayudó. 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

Para su información, es solo una respuesta de enlace, debe incluir detalles esenciales/código del enlace ella, porque el enlace puede que ya no exista en el futuro. –

+0

Código copiado del blog. – JohnMudd

+2

¡Ahora parece una buena respuesta! –

2

En Linux se puede utilizar para enviar el curl xml jabón. He aquí cómo hacerlo:

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 

Uso del archivo creado testRequest.xml que pueda

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 

aquí es un link que describe el proceso completo.

+0

Siempre me gustará el curl. Sencillo. –

Cuestiones relacionadas