Python - Respuesta 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. Al recibir una solicitud del cliente, el servidor genera una respuesta y la envía de vuelta al cliente en cierto formato.

Después de recibir e interpretar un mensaje de solicitud, un servidor responde con un mensaje de respuesta HTTP:


     
  • A Status-line
  • Zero or more header (General|Response|Entity) fields followed by CRLF
  • An empty line (i.e., a line with nothing preceding the CRLF) indicating the end of the header fields
  • Optionally a message-body

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

Línea de estado del mensaje

Una línea de estado consta de la versión del protocolo seguida de un código de estado numérico y su frase textual asociada. Los elementos están separados por caracteres SP de espacio.

Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF

Versión HTTP

Un servidor que admita HTTP versión 1.1 devolverá la siguiente información de versión:

HTTP-Version = HTTP/1.1

Código de estado

El elemento Status-Code es un número entero de 3 dígitos donde el primer dígito del Status-Code define la clase de respuesta y los dos últimos dígitos no tienen ningún rol de categorización. Hay 5 valores para el primer dígito:

SN Código y descripción
1 1xx: Informational

Significa que se recibió la solicitud y el proceso continúa.

2 2xx: Success

Significa que la acción se recibió, comprendió y aceptó con éxito.

3 3xx: Redirection

Significa que se deben tomar más medidas para completar la solicitud.

4 4xx: Client Error

Significa que la solicitud contiene una sintaxis incorrecta o que no se puede cumplir.

5 5xx: Server Error

Significa que el servidor no cumplió con una solicitud aparentemente válida.

Los códigos de estado HTTP son extensibles y no se requieren aplicaciones HTTP para comprender el significado de todos los códigos de estado registrados.

Usar solicitudes de Python

En el siguiente programa de Python usamos el módulo urllib3 para hacer una solicitud http GET y recibir la respuesta que contiene los datos. También proporciona el código de respuesta que también es administrado por las funciones del módulo. El objeto PoolManager maneja todos los detalles de la agrupación de conexiones y también maneja la seguridad de subprocesos.

import urllib3
http = urllib3.PoolManager()
resp = http.request('GET', 'http://tutorialspoint.com/robots.txt')
print resp.data
# get the status of the response
print resp.status

Cuando ejecutamos el programa anterior, obtenemos el siguiente resultado:

User-agent: *
Disallow: /tmp
Disallow: /logs
Disallow: /rate/*
Disallow: /cgi-bin/*
Disallow: /videotutorials/video_course_view.php?*
Disallow: /videotutorials/course_view.php?*
Disallow: /videos/*
Disallow: /*/*_question_bank/*
Disallow: //*/*/*/*/src/*
200