Saltar al contenido

Usando la biblioteca de solicitudes en Python

Lo primero es lo primero, le presentamos las solicitudes.

¿Qué es el recurso de solicitudes?

Requests es una biblioteca HTTP con licencia de Apache2, escrita en Python. Está diseñado para ser utilizado por humanos para interactuar con el idioma. Esto significa que no tiene que agregar manualmente cadenas de consulta a las URL ni codificar los datos de su POST. No se preocupe si eso no tiene sentido para usted. Lo hará a su debido tiempo.

¿Qué pueden hacer las solicitudes?

Las solicitudes le permitirán enviar solicitudes HTTP / 1.1 mediante Python. Con él, puede agregar contenido como encabezados, datos de formulario, archivos de varias partes y parámetros a través de bibliotecas de Python simples. También le permite acceder a los datos de respuesta de Python de la misma manera.

En programación, una biblioteca es una colección o selección preconfigurada de rutinas, funciones y operaciones que un programa puede usar. Estos elementos a menudo se denominan módulos y se almacenan en formato de objeto.

Las bibliotecas son importantes, porque carga un módulo y aprovecha todo lo que ofrece sin vincular explícitamente a todos los programas que dependen de ellas. Son realmente independientes, por lo que puede crear sus propios programas con ellos y, sin embargo, permanecen separados de otros programas.

Piense en los módulos como una especie de plantilla de código.

Para reiterar, Requests es una biblioteca de Python.

Cómo instalar solicitudes

La buena noticia es que hay varias formas de instalar la biblioteca de solicitudes. Para ver la lista completa de opciones a su disposición, puede ver la documentación de instalación oficial para las solicitudes aquí.

Puede hacer uso de pip, easy_install o tarball.

Si prefiere trabajar con código fuente, también puede obtenerlo en GitHub.

Para el propósito de esta guía, usaremos pip para instalar la biblioteca.

En su intérprete de Python, escriba lo siguiente:

pip install requests 

Importación del módulo de solicitudes

Para trabajar con la biblioteca de solicitudes en Python, debe importar el módulo apropiado. Puede hacer esto simplemente agregando el siguiente código al comienzo de su secuencia de comandos:

import requests 

Por supuesto, para hacer algo de esto, instalar la biblioteca incluida, primero debe descargar el paquete necesario y tenerlo accesible para el intérprete.

Entrenamiento de Python recomendado

Para el entrenamiento de Python, nuestra principal recomendación es DataCamp.

Hacer una solicitud

Cuando hace ping a un sitio web o portal para obtener información, esto se denomina hacer una solicitud. Eso es exactamente para lo que se ha diseñado la biblioteca de solicitudes.

Para obtener una página web, haría algo como lo siguiente:

r = requests.get(‘https://github.com/timeline.json’)

Trabajar con código de respuesta

Antes de que pueda hacer algo con un sitio web o URL en Python, es una buena idea verificar el código de estado actual de dicho portal. Puede hacer esto con el objeto de búsqueda de diccionario.

r = requests.get('https://github.com/timeline.json')
r.status_code
>>200
 
r.status_code == requests.codes.ok
>>> True
 
requests.codes['temporary_redirect']
>>> 307
 
requests.codes.teapot
>>> 418
 
requests.codes['o/']
>>> 200

Obtenga el contenido

Después de que un servidor web devuelve una respuesta, puede recopilar el contenido que necesita. Esto también se hace mediante la función de obtención de solicitudes.

import requests
r = requests.get('https://github.com/timeline.json')
print r.text
 
# The Requests library also comes with a built-in JSON decoder,
# just in case you have to deal with JSON data
 
import requests
r = requests.get('https://github.com/timeline.json')
print r.json

Trabajar con encabezados

Al utilizar un diccionario de Python, puede acceder y ver los encabezados de respuesta de un servidor. Gracias a cómo funciona Requests, puede acceder a los encabezados usando las mayúsculas que desee.

Si realiza esta función pero no existe un encabezado en la respuesta, el valor predeterminado será Ninguno.

r.headers
{
    'status': '200 OK',
    'content-encoding': 'gzip',
    'transfer-encoding': 'chunked',
    'connection': 'close',
    'server': 'nginx/1.0.4',
    'x-runtime': '148ms',
    'etag': '"e1ca502697e5c9317743dc078f67693f"',
    'content-type': 'application/json; charset=utf-8'
}
 
r.headers['Content-Type']
>>>'application/json; charset=utf-8'
 
r.headers.get('content-type')
>>>'application/json; charset=utf-8'
 
r.headers['X-Random']
>>>None
 
# Get the headers of a given URL
resp = requests.head("http://www.google.com")
print resp.status_code, resp.text, resp.headers

Codificación

Las solicitudes automáticamente diezmarán cualquier contenido extraído de un servidor. Pero la mayoría de los juegos de caracteres Unicode se decodifican sin problemas de todos modos.

Cuando realiza una solicitud a un servidor, la biblioteca de solicitudes hace una suposición fundamentada sobre la codificación de la respuesta, y lo hace basándose en los encabezados HTTP. La codificación adivinada se utilizará cuando acceda al archivo r.text.

A través de este archivo, puede discernir qué codificación está usando la biblioteca de solicitudes y cambiarla si es necesario. Esto es posible gracias a la codificación r. propiedad que encontrará en el archivo.

Si cambia el valor de codificación, Requests usará el nuevo tipo siempre que llame a r.text en su código.

print r.encoding
>> utf-8
 
>>> r.encoding = ‘ISO-8859-1’

Encabezados personalizados

Si desea agregar encabezados HTTP personalizados a una solicitud, debe pasarlos a través de un diccionario al parámetro de encabezados.

import json
url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}
headers = {'content-type': 'application/json'}
 
r = requests.post(url, data=json.dumps(payload), headers=headers)

Redirección e historial

Las solicitudes realizarán automáticamente una redirección de ubicación cuando use los verbos GET y OPTIONS en Python.

GitHub redirigirá todas las solicitudes HTTP a HTTPS automáticamente. Esto mantiene las cosas seguras y encriptadas.

Puede utilizar el método de historial del objeto de respuesta para realizar un seguimiento del estado de la redirección.

r = requests.get('http://github.com')
r.url
>>> 'https://github.com/'
 
r.status_code
>>> 200
 
r.history 
>>> []

Realizar una solicitud de publicación HTTP

También puede gestionar las solicitudes de publicación mediante la biblioteca de solicitudes.

r = requests.post(http://httpbin.org/post)

Pero también puede confiar en otras solicitudes HTTP, como PONER, ELIMINAR, CABEZA, y OPCIONES.

r = requests.put("http://httpbin.org/put")
r = requests.delete("http://httpbin.org/delete")
r = requests.head("http://httpbin.org/get")
r = requests.options("http://httpbin.org/get")

Puede utilizar estos métodos para lograr muchas cosas. Por ejemplo, usar una secuencia de comandos de Python para crear un repositorio de GitHub.

import requests, json
 
github_url = "https://api.github.com/user/repos"
data = json.dumps({'name':'test', 'description':'some test repo'})
r = requests.post(github_url, data, auth=('user', '*****'))
 
print r.json

Errores y excepciones

Hay una serie de excepciones y códigos de error con los que debe estar familiarizado al utilizar la biblioteca de solicitudes en Python.

  • Si hay un problema de red como una falla de DNS o una conexión rechazada, la biblioteca de solicitudes generará una excepción ConnectionError.
  • Con respuestas HTTP no válidas, las solicitudes también generarán una excepción HTTPError, pero son raras.
  • Si se agota el tiempo de espera de una solicitud, se generará una excepción de tiempo de espera.
  • Si y cuando una solicitud excede el número preconfigurado de redirecciones máximas, se generará una excepción TooManyRedirects.

Cualquier excepción que genere Requests se heredará del objeto request.exceptions.RequestException.

Puede leer más sobre la biblioteca de solicitudes en los enlaces a continuación.

http://docs.python-requests.org/en/latest/api/

http://pypi.python.org/pypi/requests

http://docs.python-requests.org/en/latest/user/quickstart/

http://isbullsh.it/2012/06/Rest-api-in-python/#requests

Entrenamiento de Python recomendado

Para el entrenamiento de Python, nuestra principal recomendación es DataCamp.