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