Python: solicitudes HTTP

El protocolo de transferencia de hipertexto o http funciona en el modelo de servidor cliente. Por lo general, el navegador web es el cliente y la computadora que aloja el sitio web es el servidor. En python usamos el módulo de solicitudes para crear las solicitudes http. Es un módulo muy poderoso que puede manejar muchos aspectos de la comunicación http más allá de los simples datos de solicitud y respuesta. Puede manejar autenticación, compresión / descompresión, solicitudes fragmentadas, etc.

Un cliente HTTP envía una solicitud HTTP a un servidor en forma de mensaje de solicitud que incluye el siguiente formato:

  • Una línea de solicitud
  • Cero o más campos de encabezado (General | Solicitud | Entidad) seguidos de CRLF
  • Una línea vacía (es decir, una línea sin nada antes del CRLF) que indica el final de los campos del encabezado
  • Opcionalmente un cuerpo de mensaje

Las siguientes secciones explican cada una de las entidades utilizadas en un mensaje de solicitud HTTP.

Línea de solicitud

La línea de solicitud comienza con un token de método, seguido del URI de solicitud y la versión del protocolo, y termina con CRLF. Los elementos están separados por caracteres SP de espacio.

Request-Line = Method SP Request-URI SP HTTP-Version CRLF

Analicemos cada una de las partes mencionadas en la Línea de solicitud.

Método de solicitud

La solicitud method indica el método a realizar en el recurso identificado por el dado Request-URI. El método distingue entre mayúsculas y minúsculas y siempre debe mencionarse en mayúsculas. La siguiente tabla enumera todos los métodos admitidos en HTTP / 1.1.

SN Método y descripción
1 GET

El método GET se usa para recuperar información del servidor dado usando un URI dado. Las solicitudes que utilizan GET solo deben recuperar datos y no deben tener ningún otro efecto en los datos.

2 HEAD

Igual que GET, pero transfiere solo la línea de estado y la sección de encabezado.

3 POST

Una solicitud POST se utiliza para enviar datos al servidor, por ejemplo, información del cliente, carga de archivos, etc. utilizando formularios HTML.

4 PUT

Reemplaza todas las representaciones actuales del recurso de destino con el contenido cargado.

5 DELETE

Elimina todas las representaciones actuales del recurso de destino proporcionadas por URI.

6 CONNECT

Establece un túnel al servidor identificado por un URI determinado.

7 OPTIONS

Describa las opciones de comunicación para el recurso de destino.

8 TRACE

Realiza una prueba de bucle de mensajes junto con la ruta al recurso de destino.

Solicitud-URI

El Request-URI es un identificador uniforme de recursos e identifica el recurso sobre el cual aplicar la solicitud. A continuación se muestran los formularios más utilizados para especificar un URI:

Request-URI = "*" | absoluteURI | abs_path | authority
 
SN Método y descripción
1 El asterisco *se utiliza cuando una solicitud HTTP no se aplica a un recurso en particular, sino al servidor mismo, y solo se permite cuando el método utilizado no se aplica necesariamente a un recurso. Por ejemplo:

OPTIONS * HTTP/1.1

2 los absoluteURIse utiliza cuando se realiza una solicitud HTTP a un proxy. Se solicita al proxy que reenvíe la solicitud o el servicio desde un caché válido y devuelva la respuesta. Por ejemplo:

GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1

3 La forma más común de Request-URI es la que se usa para identificar un recurso en un servidor de origen o puerta de enlace. Por ejemplo, un cliente que desee recuperar un recurso directamente del servidor de origen crearía una conexión TCP al puerto 80 del host "www.w3.org" y enviaría las siguientes líneas:

GET /pub/WWW/TheProject.html HTTP/1.1

Host: www.w3.org

Tenga en cuenta que la ruta absoluta no puede estar vacía; si no hay ninguno presente en el URI original, DEBE indicarse como "/" (la raíz del servidor).

Usar solicitudes de Python

Usaremos las solicitudes del módulo para conocer las solicitudes http.

pip install requests

En el siguiente ejemplo, vemos un caso de solicitud GET simple e imprimimos el resultado de la respuesta. Elegimos imprimir solo los primeros 300 caracteres.

# How to make http request
import requests as req
r = req.get('http://www.tutorialspoint.com/python/')
print(r.text)[0:300]

Cuando ejecutamos el programa anterior, obtenemos el siguiente resultado:

<!DOCTYPE html>
<!--[if IE 8]><html class="ie ie8"> <![endif]-->
<!--[if IE 9]><html class="ie ie9"> <![endif]-->
<!--[if gt IE 9]><!-->	<html> <!--<![endif]-->
<head>
<!-- Basic -->
<meta charset="utf-8">
<title>Python Tutorial</title>
<meta name="description" content="Python Tutorial