Python - resposta HTTP

O http ou Hyper Text Transfer Protocol funciona no modelo cliente-servidor. Normalmente, o navegador da web é o cliente e o computador que hospeda o site é o servidor. Ao receber uma solicitação do cliente, o servidor gera uma resposta e a envia de volta ao cliente em determinado formato.

Depois de receber e interpretar uma mensagem de solicitação, um servidor responde com uma mensagem de resposta 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

As seções a seguir explicam cada uma das entidades usadas em uma mensagem de resposta HTTP.

Linha de status da mensagem

Uma linha de status consiste na versão do protocolo seguida por um código de status numérico e sua frase textual associada. Os elementos são separados por caracteres de espaço SP.

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

Versão HTTP

Um servidor compatível com HTTP versão 1.1 retornará as seguintes informações de versão:

HTTP-Version = HTTP/1.1

Código de Status

O elemento Status-Code é um número inteiro de 3 dígitos onde o primeiro dígito do Status-Code define a classe de resposta e os dois últimos dígitos não têm qualquer função de categorização. Existem 5 valores para o primeiro dígito:

SN Código e Descrição
1 1xx: Informational

Isso significa que a solicitação foi recebida e o processo continua.

2 2xx: Success

Significa que a ação foi recebida, compreendida e aceita com sucesso.

3 3xx: Redirection

Isso significa que outras ações devem ser tomadas para concluir a solicitação.

4 4xx: Client Error

Isso significa que a solicitação contém sintaxe incorreta ou não pode ser atendida.

5 5xx: Server Error

Isso significa que o servidor falhou em atender a uma solicitação aparentemente válida.

Os códigos de status HTTP são extensíveis e os aplicativos HTTP não são necessários para compreender o significado de todos os códigos de status registrados.

Usando solicitações Python

No programa python abaixo, usamos o módulo urllib3 para fazer uma solicitação http GET e receber a resposta contendo os dados. Ele também fornece o código de resposta que também é gerenciado pelas funções no módulo. O objeto PoolManager lida com todos os detalhes do pool de conexão e também lida com a segurança do thread.

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

Quando executamos o programa acima, obtemos a seguinte saída -

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