Python - solicitações 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. Em python, usamos o módulo de solicitações para criar as solicitações http. É um módulo muito poderoso que pode lidar com muitos aspectos da comunicação http, além dos simples dados de solicitação e resposta. Ele pode lidar com autenticação, compactação / descompactação, solicitações em partes, etc.

Um cliente HTTP envia uma solicitação HTTP a um servidor na forma de uma mensagem de solicitação que inclui o seguinte formato:

  • Uma linha de solicitação
  • Zero ou mais campos de cabeçalho (Geral | Solicitação | Entidade) seguidos por CRLF
  • Uma linha vazia (ou seja, uma linha sem nada antes do CRLF) indicando o final dos campos do cabeçalho
  • Opcionalmente, um corpo de mensagem

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

Linha de Pedido

O Request-Line começa com um token de método, seguido pelo Request-URI e a versão do protocolo, e termina com CRLF. Os elementos são separados por caracteres de espaço SP.

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

Vamos discutir cada uma das partes mencionadas na Linha de Solicitação.

Método de Solicitação

O pedido method indica o método a ser executado no recurso identificado pelo dado Request-URI. O método diferencia maiúsculas de minúsculas e sempre deve ser mencionado em maiúsculas. A tabela a seguir lista todos os métodos suportados em HTTP / 1.1.

SN Método e Descrição
1 GET

O método GET é usado para recuperar informações de um determinado servidor usando um determinado URI. As solicitações que usam GET devem apenas recuperar dados e não devem ter nenhum outro efeito sobre os dados.

2 HEAD

O mesmo que GET, mas transfere a linha de status e a seção de cabeçalho apenas.

3 POST

Uma solicitação POST é usada para enviar dados para o servidor, por exemplo, informações do cliente, upload de arquivo, etc. usando formulários HTML.

4 PUT

Substitui todas as representações atuais do recurso de destino com o conteúdo carregado.

5 DELETE

Remove todas as representações atuais do recurso de destino fornecidas por URI.

6 CONNECT

Estabelece um túnel para o servidor identificado por um determinado URI.

7 OPTIONS

Descreva as opções de comunicação para o recurso de destino.

8 TRACE

Executa um teste de loopback de mensagem junto com o caminho para o recurso de destino.

Request-URI

O Request-URI é um Uniform Resource Identifier e identifica o recurso sobre o qual aplicar a solicitação. A seguir estão os formulários mais comumente usados ​​para especificar um URI:

Request-URI = "*" | absoluteURI | abs_path | authority
 
SN Método e Descrição
1 O asterisco *é usado quando uma solicitação HTTP não se aplica a um recurso específico, mas ao próprio servidor, e só é permitido quando o método usado não se aplica necessariamente a um recurso. Por exemplo:

OPTIONS * HTTP/1.1

2 o absoluteURIé usado quando uma solicitação HTTP está sendo feita para um proxy. O proxy é solicitado para encaminhar a solicitação ou serviço de um cache válido e retornar a resposta. Por exemplo:

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

3 A forma mais comum de Request-URI é aquela usada para identificar um recurso em um servidor ou gateway de origem. Por exemplo, um cliente que deseja recuperar um recurso diretamente do servidor de origem criaria uma conexão TCP para a porta 80 do host "www.w3.org" e enviaria as seguintes linhas:

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

Host: www.w3.org

Observe que o caminho absoluto não pode estar vazio; se nenhum estiver presente no URI original, ele DEVE ser fornecido como "/" (a raiz do servidor).

Usando solicitações Python

Usaremos as solicitações do módulo para aprender sobre a solicitação http.

pip install requests

No exemplo abaixo, vemos um caso de solicitação GET simples e imprimimos o resultado da resposta. Optamos por imprimir apenas os primeiros 300 caracteres.

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

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

<!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