SOAP significa Protocolo simple de acceso a objetos , ya que el nombre sugiere nada más que un protocolo para intercambiar datos estructurados entre Nodes. Utiliza XML en lugar de JSON.
En este artículo vamos a ver cómo hacer llamadas a la API de SOAP usando python. Si desea probar cómo se vería exactamente la carga útil y la respuesta, puede usar el siguiente comando curl:
Método 1: Uso de la solicitud
Primero, importamos la biblioteca de requests , luego definimos la URL de SOAP.
El siguiente paso, y el más importante, es formatear el cuerpo XML de acuerdo con la estructura proporcionada en la URL de SOAP. Para conocer el formato, simplemente visite la URL de SOAP y haga clic en el enlace CountryISOCode y formatee el XML en consecuencia.
Luego, simplemente prepara los encabezados y realiza la llamada POST.
Código:
Python3
import requests # SOAP request URL url = "http://webservices.oorsprong.org/websamples.countryinfo/CountryInfoService.wso" # structured XML payload = """<?xml version=\"1.0\" encoding=\"utf-8\"?> <soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"> <soap:Body> <CountryIntPhoneCode xmlns=\"http://www.oorsprong.org/websamples.countryinfo\"> <sCountryISOCode>IN</sCountryISOCode> </CountryIntPhoneCode> </soap:Body> </soap:Envelope>""" # headers headers = { 'Content-Type': 'text/xml; charset=utf-8' } # POST request response = requests.request("POST", url, headers=headers, data=payload) # prints the response print(response.text) print(response)
Producción:
<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <m:CountryIntPhoneCodeResponse xmlns:m="http://www.oorsprong.org/websamples.countryinfo"> <m:CountryIntPhoneCodeResult>91</m:CountryIntPhoneCodeResult> </m:CountryIntPhoneCodeResponse> </soap:Body> </soap:Envelope> <Response [200]>
Método 2: Usar Zeep
Ahora que hemos visto cómo hacer llamadas SOAP con requests, vamos a ver lo fácil que es hacerlo a través de Zeep. Primero, necesitas instalar Zeep .
pip3 install zeep
Acercarse:
- Primero, configure la URL de WSDL. Puede obtener la URL de WSDL simplemente visitando la URL base y haciendo clic en Descripción del servicio . Eso lo llevará a la URL de WSDL. La URL base será service_url y agregará el nombre del servicio después de la URL base.
- A continuación, debe crear un elemento de encabezado. Ahora, debe configurar el elemento de encabezado con method_url y service_url .
- Ahora, inicialice un cliente Zeep con la URL de WSDL.
- Toda la configuración está lista, ahora solo necesita llamar al servicio Zeep con el nombre del servicio, aquí el nombre del servicio es CountryIntPhoneCode . Debe pasar los parámetros con el código de país y también pasar el encabezado a _soapheaders como una lista.
- Ahora, esto devolvería directamente el código telefónico del país.
Código:
Python3
import zeep # set the WSDL URL wsdl_url = "http://webservices.oorsprong.org/websamples.countryinfo/CountryInfoService.wso?WSDL" # set method URL method_url = "http://webservices.oorsprong.org/websamples.countryinfo/CountryIntPhoneCode" # set service URL service_url = "http://webservices.oorsprong.org/websamples.countryinfo/CountryInfoService.wso" # create the header element header = zeep.xsd.Element( "Header", zeep.xsd.ComplexType( [ zeep.xsd.Element( "{http://www.w3.org/2005/08/addressing}Action", zeep.xsd.String() ), zeep.xsd.Element( "{http://www.w3.org/2005/08/addressing}To", zeep.xsd.String() ), ] ), ) # set the header value from header element header_value = header(Action=method_url, To=service_url) # initialize zeep client client = zeep.Client(wsdl=wsdl_url) # set country code for India country_code = "IN" # make the service call result = client.service.CountryIntPhoneCode( sCountryISOCode=country_code, _soapheaders=[header_value] ) # print the result print(f"Phone Code for {country_code} is {result}") # set country code for United States country_code = "US" # make the service call result = client.service.CountryIntPhoneCode( sCountryISOCode=country_code, _soapheaders=[header_value] ) # print the result print(f"Phone Code for {country_code} is {result}") print(response)
Producción:
Phone Code for IN is 91 Phone Code for US is 1 <Response [200]>
Publicación traducida automáticamente
Artículo escrito por debdutgoswami y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA