Solicitudes GET y POST usando Python

Esta publicación analiza dos métodos de solicitud HTTP (Protocolo de transferencia de hipertexto), solicitudes GET y POST en Python y su implementación en Python.

¿Qué es HTTP?

HTTP es un conjunto de protocolos diseñados para permitir la comunicación entre clientes y servidores. Funciona como un protocolo de solicitud-respuesta entre un cliente y un servidor.
Un navegador web puede ser el cliente y una aplicación en una computadora que aloja un sitio web puede ser el servidor.

Entonces, para solicitar una respuesta del servidor, existen principalmente dos métodos:

  1. GET: para solicitar datos al servidor.
  2. POST: para enviar datos para ser procesados ​​al servidor.

Aquí hay un diagrama simple que explica el concepto básico de los métodos GET y POST.

Ahora, para realizar solicitudes HTTP en Python, podemos usar varias bibliotecas HTTP como:

  • httplib
  • urllib
  • requests

La más elegante y simple de las bibliotecas enumeradas anteriormente es Requests. Usaremos la biblioteca de solicitudes en este artículo. Para descargar e instalar la biblioteca de solicitudes, use el siguiente comando:

pip install requests

O, descárguelo desde aquí e instálelo manualmente.

Hacer una solicitud Get

# importing the requests library
import requests

# api-endpoint
URL = "http://maps.googleapis.com/maps/api/geocode/json"

# location given here
location = "delhi technological university"

# defining a params dict for the parameters to be sent to the API
PARAMS = {'address':location}

# sending get request and saving the response as response object
r = requests.get(url = URL, params = PARAMS)

# extracting data in json format
data = r.json()

# extracting latitude, longitude and formatted address
# of the first matching location
latitude = data['results'][0]['geometry']['location']['lat']
longitude = data['results'][0]['geometry']['location']['lng']
formatted_address = data['results'][0]['formatted_address']

# printing the output
print("Latitude:%s\nLongitude:%s\nFormatted Address:%s"
%(latitude, longitude,formatted_address))

Salida:

El ejemplo anterior busca la latitud, la longitud y la dirección formateada de una ubicación determinada enviando una solicitud GET a la API de Google Maps. Una API (interfaz de programación de aplicaciones) le permite acceder a las funciones internas de un programa de forma limitada. Y en la mayoría de los casos, los datos proporcionados están en formato JSON (notación de objetos JavaScript) (que se implementa como objetos de diccionario en Python).

Puntos importantes para inferir:

PARAMS = {'address':location}

La URL de una solicitud GET generalmente incluye algunos parámetros. Para la biblioteca de solicitudes, los parámetros se pueden definir como un diccionario. Estos parámetros se analizan posteriormente y se agregan a la URL base o al api-endpoint.
Para comprender la función de los parámetros, intente imprimir r.url después de crear el objeto de respuesta. Verá algo como esto:

http://maps.googleapis.com/maps/api/geocode/json?address=delhi+technological+university

Esta es la URL real en la que se realiza la solicitud GET

r = requests.get(url = URL, params = PARAMS)

Aquí creamos un objeto de respuesta «r» que almacenará la solicitud-respuesta. Usamos el método request.get () ya que estamos enviando una solicitud GET. Los dos argumentos que pasamos son url y el diccionario de parámetros.

data = r.json()

Ahora, para recuperar los datos del objeto de respuesta, necesitamos convertir el contenido de la respuesta sin procesar en una estructura de datos de tipo JSON. Esto se logra mediante el método json (). Finalmente, extraemos la información requerida analizando el objeto de tipo JSON.

Hacer una solicitud POST

# importing the requests library
import requests

# defining the api-endpoint
API_ENDPOINT = "http://pastebin.com/api/api_post.php"

# your API key here
API_KEY = "XXXXXXXXXXXXXXXXX"

# your source code here
source_code = '''
print("Hello, world!")
a = 1
b = 2
print(a + b)
'''

# data to be sent to api
data = {'api_dev_key':API_KEY,
        'api_option':'paste',
        'api_paste_code':source_code,
        'api_paste_format':'python'}

# sending post request and saving response as response object
r = requests.post(url = API_ENDPOINT, data = data)

# extracting response text
pastebin_url = r.text
print("The pastebin URL is:%s"%pastebin_url)

Este ejemplo explica cómo pegar su código_fuente en pastebin.com enviando una solicitud POST a la API PASTEBIN.
En primer lugar, deberá generar una clave API registrándose aquí y luego acceder a su clave API aquí.

Características importantes de este código:

data = {'api_dev_key':API_KEY,
        'api_option':'paste',
        'api_paste_code':source_code,
        'api_paste_format':'python'}

Aquí nuevamente, tendremos que pasar algunos datos al servidor API. Almacenamos estos datos como un diccionario.

r = requests.post(url = API_ENDPOINT, data = data)

Aquí creamos un objeto de respuesta «r» que almacenará la solicitud-respuesta. Usamos el método request.post () ya que estamos enviando una solicitud POST. Los dos argumentos que pasamos son url y el diccionario de datos.

pastebin_url = r.text

En respuesta, el servidor procesa los datos que se le envían y envía la URL pastebin de su código_fuente, al que puede acceder simplemente mediante r.text.

El método request.post podría usarse para muchas otras tareas, así como para completar y enviar los formularios web, publicar en su línea de tiempo de FB utilizando la API Graph de Facebook, etc.

Aquí hay algunos puntos importantes sobre los que reflexionar:

  • Cuando el método es GET, todos los datos del formulario se codifican en la URL y se añaden a la URL de acción como parámetros de cadena de consulta. Con POST, los datos del formulario aparecen dentro del cuerpo del mensaje de la solicitud HTTP.
  • En el método GET, los datos de los parámetros se limitan a lo que podemos incluir en la línea de solicitud (URL). Es más seguro usar menos de 2K de parámetros, algunos servidores manejan hasta 64K. No hay tal problema en el método POST ya que enviamos datos en el cuerpo del mensaje de la solicitud HTTP, no en la URL.
  • Solo se permiten caracteres ASCII para que los datos se envíen en el método GET. No existe tal restricción en el método POST.
  • GET es menos seguro en comparación con POST porque los datos enviados forman parte de la URL. Por lo tanto, el método GET no debe usarse al enviar contraseñas u otra información confidencial.

Escriba sus comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema discutido anteriormente.

¡Atención geek! Fortalezca sus cimientos con el Curso básico de programación de Python y aprenda los conceptos básicos.

Para empezar, los preparativos de su entrevista Mejore sus conceptos de estructuras de datos con el curso de Python DS.