Usando a Fetch API no Python (ou quase isso)
Uma das coisas que mais gosto de fazer nas horas vagas é explorar APIs de diferentes sites através da engenharia reversa. A ideia é criar minhas próprias APIs ao analisar as requisições, entender os headers e cookies, tudo sem a necessidade de recorrer ao scraping tradicional do site.
Nesse processo, percebi que muitas vezes eu copiava as requisições diretamente do DevTools, como as requisições fetch
, e precisava adaptá-las para uso em Python, aproveitando os headers e organizando os cookies. Essa rotina foi o que me levou a desenvolver uma biblioteca para simplificar o processo. A proposta era bem simples: colar a requisição e fazer apenas algumas modificações para obter a resposta desejada. Assim nasceu o httpxfetch
, uma ferramenta que decidi compartilhar com a comunidade Python, publicando-a no PyPI.
A jornada de publicar no PyPI não foi tão tranquila quanto eu esperava. Mesmo tendo publicado um projeto anteriormente, o processo ainda se mostrava um desafio, especialmente porque escolhi utilizar apenas o setuptools e a biblioteca build para construir o pacote, sem recorrer a ferramentas mais especializadas, como o Poetry.
O httpxfetch
é, essencialmente, um wrapper em Python para a função fetch
do JavaScript. Ele foi criado com o propósito de simplificar o processo de engenharia reversa em APIs. Vale ressaltar que não foi construído para emular 100% a API do JavaScript, apenas facilitar a manipulação dos dados. A missão principal é tornar os testes e a exploração de dados mais acessíveis, permitindo que os usuários colem as requisições fetch
geradas pelo navegador diretamente no código Python e as executem de forma eficiente.
Como começar
Você pode instalar o httpxfetch
facilmente usando o pip:
pip install httpxfetch
Aqui está um exemplo rápido de como usar a biblioteca:
from httpxfetch import fetch
# Exemplo: Fazendo uma requisição GET
response = fetch('https://api.example.com/data')
print(response.status_code)
print(response.json())
Funcionalidades
-
Testes Simplificados: Copie e cole requisições
fetch
das ferramentas de desenvolvedor do navegador em seu código Python para testes e exploração de dados. -
Wrapper para HTTPX: Utiliza a poderosa biblioteca
httpx
para realizar requisições HTTP em Python. -
Manipulação de JSON: Converte automaticamente o corpo da requisição para uma string JSON usando uma função equivalente a
JSON.stringify
.
Uso
from httpxfetch import fetch, JSON
# Exemplo: Fazendo uma requisição POST com carga JSON
url = 'https://api.example.com/data'
options = {
'method': 'post',
'headers': {'Content-Type': 'application/json'},
'body': JSON.stringify({'key': 'value'}),
}
response = fetch(url, options)
print(response.status_code)
print(response.json())
Tipo de Retorno
A função fetch
retorna uma instância da classe httpx.Response
. Todos os métodos disponíveis na classe httpx.Response
podem ser aplicados ao resultado da função fetch
.
O projeto inclui intencionalmente alguns passos redundantes, como a conversão do corpo do fetch
para uma string antes de carregá-lo como um dicionário. Isso é feito para minimizar o esforço necessário, fornecendo uma função conveniente para simular o JSON.stringify
, visando facilitar o uso.
Contribuições são bem-vindas! Sintam-se à vontade para abrir issues, enviar solicitações de pull ou fornecer sugestões para melhorar o projeto.
O projeto é inteiramente open-source e o código pode ser visto no repositório no GitHub.