La librería requests de python

Públicado en


En todos los lenguajes de programación modernos existen múltiples librerías que nos permiten hacer peticiones HTTP, FTP, etc. Pero por lo general, las librerías nativas de varios de estos lenguajes tienen fines tan genéricos que se necesitan algunas líneas extras de código para conseguir un fin específico. En el caso de python contamos con la librería nativa urllib (urllib2 en python 2.7), la cual provee de múltiples métodos para obtener todo tipo de información de una url, además de utilidades para normalizar los datos obtenidos, esta librería es sin duda muy útil, pero imaginando que queremos consumir un API completo, ¿cual es la mejor opción? La verdad es que para esto, sin duda es mejor instalar “requests”.

Para instalar requests basta solo con correr el comando:

pip install requests

Con esto podemos importarla en un programa:

import requests

Ahora se puede comenzar a jugar con requests. Pero, ¿que nos brinda requests?

Básicamente request es un wrapper de urllib junto con otros módulos de python para proporcionar métodos sencillos con estructura REST, pues esta tiene los métodos “post”, “get”, “put”, “patch”, “delete”, “head” y “options”, todo lo necesario para consumir un API sin problemas.

Requests cuenta con una forma muy simple de implementación, un ejemplo de una consulta GET sería:

response = requests.get(“http://www.gooogle.com”)

Como ves aquí, el método requests.get devuelve un objeto llamada “response”; en este objeto se encuentra toda la información correspondiente a la respuesta de la petición. De los atributos que posee response, nos interesan estos:

response.status_code: Este es el código HTTP devuelto por el servidor.

response.content: Aquí encontraremos el contenido en bruto de la respuesta.

response.json(): En el caso de que la respuesta sea un json, este método serializa el string y devuelve un “dict” con la estructura del json correspondiente, en caso de no recibir un json por respuesta, el método dispara una excepción.

Es importante conocer bien el comportamiento de la url a la que nos estamos conectando, saber qué esperar de esta, ya sea en caso de éxito o de error, y tratar ambos casos como es debido; por ejemplo aquí mostraré un pequeño fragmento de código que intenta obtener el resultado de una búsqueda con el API de youtube, en caso de que la respuesta sea exitosa, este imprime los títulos de cada resultado, en el caso contrario, un mensaje de error.

url = "https://gdata.youtube.com/feeds/api/videos?q=python&alt=json"
response = requests.get(url)
if response.status_code == 200:
    results = response.json()
    for result in results['feed']['entry']:
        print result['title']['$t']
else:
    print "Error code %s" % response.status_code

Los métodos post, put y patch requieren de un campo extra llamado “data”, este debe ser un diccionario con todos los atributos que el "end-point" necesita:

data = {
    “nombre”: “Jesus Anaya”,
    “correo”: “jesus.anaya@example.com”
}
url = “http://example.com/api/v1/alta_usuario”
response = requests.post(url, data=data)

En algunos casos el servidor necesita que la petición contenga cabeceras indicando "content-type", esto se soluciona con el parámetro “headers”:

data = {
    “nombre”: “Jesus Anaya”,
    “correo”: “jesus.anaya.dev@gmail.com”
}
headers = {
    "Content-Type" : "application/json",
    "Accept":"application/json"
 }
url = “http://example.com/api/v1/alta_usuario”
response = requests.post(url, data=data, headers=headers)

Un último ejemplo que me gustaría mostrar, es que podemos enviar cookies de una forma similar, el ejemplo lo explica mejor:

data = {
    “nombre”: “Jesus Anaya”,
    “correo”: “jesus.anaya.dev@gmail.com”
}
headers = {
    "Content-Type" : "application/json",
    "Accept":"application/json"
 }
cookies = {
    “cookies_1”: “una cookie enviada”
}
url = “http://example.com/api/v1/alta_usuario”
response = requests.post(url, data=data, headers=headers, cookies=cookies)

Como puedes ver, request es una herramienta muy útil si quieres consumir API fácilmente desde una aplicación python.

No olvides que es muy importante siempre leer la documentación oficial de todas las herramientas con las que trabajas, ya que es ahí donde se pueden resolver dudas más específicas.

Espero que este post te ayude, para cualquier pregunta estaré al pendiente de los comentarios.

http://docs.python-requests.org/en/master/




Jesus Armando Anaya
Jesus Armando Anaya

Soy programador por profesión y por afición, me gusta estar aprendiendo, participar en comunidades, y buscar excusas para viajar lejos.


blog comments powered by Disqus