# Consumer

El BackEndBase permite utilizar urllib (opens new window) para definir funciones y clases que ayudan a abrir conexiones URL (principalmente HTTP): autenticación básica y resumida, redirecciones, cookies y más.

# modo de uso

La función consumer espera los siguientes parametros:

def consumer(uri=None, method='GET', data=None, custom_headers=None, session=False, use_ssl=False, options=None):
    ...
  • El parámetro custom_headers por defecto es {'Content-Type': 'application/json'} y no es necesario enviarlo cuando se trabaja con este tipo de cabeceras. Si desea cambiarlo use el parámetro options.

  • El parámetro use_ssl especifica si la transacción deberá ser por https (recomendado), aunque está deshabilitado por defecto (False). Consulta más información por aquí (opens new window).

  • Para el parseo de XML se utiliza The ElementTree XML API (opens new window).

A tener en cuenta:

  • El parámetro options sobreescribe las cabeceras por defecto({'Content-Type': 'application/json'}), por las que se envían en el parámetro custom_headers, principalmente para el envío de XML (opens new window)

Se recomienda usar:

headers = {
    "Content-Type": "text/xml",
    "Accept": "text/xml"
}

en las cabeceras cuando maneje solicitudes en XML.

# utilizando JSON

Ejemplo:















 


from app.ext.rest import consumer
...

uri = 'https://httpbin.org/post'

data = {
    "name": "lilith"
    "lastname": "Doe",
}

headers = {
    "Authorization": "AwesomeToken"
}

resp = consumer(uri, "POST", data, headers, use_ssl=True)
print("response", resp)

El resultado del ejemplo anterior:








 

 




 
 
 
 




{
    "args": {},
    "data": "{"name": "lilith", "lastname": "Doe"}",
    "files": {},
    "form": {},
    "headers": {
        "Accept-Encoding": "identity",
        "Authorization": "AwesomeToken",
        "Content-Length": "37",
        "Content-Type": "application/json",
        "Host": "httpbin.org",
        "User-Agent": "Python-urllib/3.7",
        "X-Amzn-Trace-Id": "Root=1-5f90504b-5fb7d2e42efd5d7f5db2c308"
    },
    "json": {
        "lastname": "Doe",
        "name": "lilith"
    },
    "origin": "190.251.251.251",
    "url": "http://httpbin.org/post"
}

# utilizando XML

Ejemplo:





















 







from app.ext.rest import consumer
import xml.etree.ElementTree as xmlTree
...

uri = 'https://fakerestapi.azurewebsites.net/api/Authors'

headers = {
    "Content-Type": "text/xml",
    "Accept": "text/xml"
}

data = """
<Author xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/FakeRestAPI.Web.Models">
  <FirstName>lilith</FirstName>
  <ID>1</ID>
  <IDBook>2</IDBook>
  <LastName>doe</LastName>
</Author>
"""

resp = consumer(uri, 'POST', data, headers, use_ssl=True, options='xml')

resp_xml = xmlTree.tostring(resp)
# or
# resp_xml = xmlTree.tostring(resp, encoding='ISO-8859-1', method='xml')

print("response", resp_xml)

El resultado del ejemplo anterior:

<Author
  xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
  xmlns="http://schemas.datacontract.org/2004/07/FakeRestAPI.Web.Models">
  <FirstName>lilith</FirstName>
  <ID>1</ID>
  <IDBook>2</IDBook>
  <LastName>doe</LastName>
</Author>

# Más información

Para mas información consulte: