Executando verificação de segurança...
2

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.

Carregando publicação patrocinada...