Interagindo com servidores HTTP com Python
Ensinamento de como interagir com páginas de internet de forma simples e fácil por meio da biblioteca requests do Python. Várias coisas são ensinadas, dentre elas como baixar arquivos de páginas, logar em sites, fazer requisições simples e criar sessões.
Introdução
Estamos constantemente interagindo com servidores por meio de nossos navegadores, fazendo logins em sites, assistindo à vídeos e requisitando informações constantemente. Porém a mesma coisa que um humano pode fazer por meio de um navegador, um programa de computador também consegue, afinal tudo se resume ao protocolo HTTP (Hypertext Transfer Protocol), que fornece páginas HTML ao navegador e este, por sua vez, interpreta tais páginas e deixa de forma arrumada ao cliente.
Neste artigo irei ensinar a interagir com servidores HTTP, fazer requisições, logins em site, download de conteúdo, tudo por meio do Python. Para isso usarei o módulo requests, ele não é builtin do Python, logo é necessário instalá-lo com o seguinte comando no terminal:
pip install requests
Vale salientar que para um melhor compreendimento do artigo é necessário que o leitor possua um conhecimento básico do protocolo HTTP, a linguagem de marcação HTML e claro, de Python.
Usaremos agora o método requests.get() para fazer uma requisição GET ao Google, tal requisição retornará um objeto que armazenaremos em uma variável 'resp'.
Se tudo correr bem, nenhuma exceção será lançada, há vários atributos que podemos usar do objeto retornado veja:
Com o HTML de resposta obtido por meio do atributo 'text', é possível fazer a análise, porém tal tópico ficará para outro artigo. Simplesmente printarei a resposta, é importante converter para string primeiramente.
Para enviar informações no cabeçalho basta criar um dicionário com um par chave:valor, de forma que a chave seja o campo, como o User Agent e o valor deste campo. Uma vez feito isto, é necessário passar o cabeçalho como um parâmetro para o método com 'headers=dicionario_dos_cabecalhos'.
Alterei o parâmetro allow_redirects para True afim de permitir possíveis redirecionamentos.
Primeiramente deve-se criar um dicionário com o nome do input HTML a ser preenchido e seu respectivo valor.
Depois enviaremos ao servidor por meio do método requests.post haja vista que postaremos uma informação no site, logo usufruiremos da funcionalidade POST do HTTP. Basta acrescentar o parâmetro 'data=payload_a_ser_enviado'.
É importantíssimo salientar que as informações devem ser postadas em uma determinada url que muitas vezes não é a mesma onde o formulário HTML se encontra. Deve ser postada para onde o formulário é enviado, isto pode ser visto no atributo action='url_a_ser_postada' da tag
Neste artigo irei ensinar a interagir com servidores HTTP, fazer requisições, logins em site, download de conteúdo, tudo por meio do Python. Para isso usarei o módulo requests, ele não é builtin do Python, logo é necessário instalá-lo com o seguinte comando no terminal:
pip install requests
Vale salientar que para um melhor compreendimento do artigo é necessário que o leitor possua um conhecimento básico do protocolo HTTP, a linguagem de marcação HTML e claro, de Python.
Fazendo uma requisições simples
Primeiramente importaremos o módulo requests:import requests
Usaremos agora o método requests.get() para fazer uma requisição GET ao Google, tal requisição retornará um objeto que armazenaremos em uma variável 'resp'.
resp = requests.get('http://www.google.com.br')
Se tudo correr bem, nenhuma exceção será lançada, há vários atributos que podemos usar do objeto retornado veja:
- resp.status_code - Contém o código HTTP de resposta, ex: 200, 300, 303.
- resp.cookies - Retorna os cookies.
- resp.url - Retorna a url final, útil em casos de redirecionamento.
- resp.text - Contém o HTML da página requisitada.
- resp.json - Converte a resposta direto em JSON, útil para requisições à APIs.
- resp.content - Retorna o conteúdo da página, por exemplo o binário de um PDF ao invés de seu HTML.
Com o HTML de resposta obtido por meio do atributo 'text', é possível fazer a análise, porém tal tópico ficará para outro artigo. Simplesmente printarei a resposta, é importante converter para string primeiramente.
print('O resultado da sua requisição é {}'.format(str(resp.text)))
Enviando cabeçalhos ao servidor
Fizemos uma requisição crua até agora, sem User-Agent, Referer e outras informações importantes de uma requisição HTTP. Tais funcionalidades podem ser facilmente implementadas dessa forma:
cabecalhos = {'User-Agent': 'Debian', 'Refereer'}
resp = requests.get('http://www.google.com.br', allow_redirects=True, headers=cabecalhos)
Para enviar informações no cabeçalho basta criar um dicionário com um par chave:valor, de forma que a chave seja o campo, como o User Agent e o valor deste campo. Uma vez feito isto, é necessário passar o cabeçalho como um parâmetro para o método com 'headers=dicionario_dos_cabecalhos'.
Alterei o parâmetro allow_redirects para True afim de permitir possíveis redirecionamentos.
Enviando payloads ao Servidor
Ao enviar payload poderemos preencher formulários HTML, ou seja, enviar nomes de usuário e senha por exemplo.
payload = {'username': 'ilovelinux', 'password': 'whatever'}
resp = requests.post('http://www.sitealeatorio.com.br', allow_redirects=True, data=payload)
Primeiramente deve-se criar um dicionário com o nome do input HTML a ser preenchido e seu respectivo valor.
Depois enviaremos ao servidor por meio do método requests.post haja vista que postaremos uma informação no site, logo usufruiremos da funcionalidade POST do HTTP. Basta acrescentar o parâmetro 'data=payload_a_ser_enviado'.
É importantíssimo salientar que as informações devem ser postadas em uma determinada url que muitas vezes não é a mesma onde o formulário HTML se encontra. Deve ser postada para onde o formulário é enviado, isto pode ser visto no atributo action='url_a_ser_postada' da tag