Visão geral do projeto
Arquivos-fonte
Esta página foi gerada com base nos seguintes arquivos-fonte:
O res-downloader é uma ferramenta de desktop multiplataforma para captura e download de recursos de rede, desenvolvida em Go com o framework Wails v2. O projeto atua como um proxy local de interceptação de tráfego, permitindo que usuários capturem vídeos, áudios, imagens, streams m3u8 e transmissões ao vivo de diversas plataformas como WeChat Channels, Mini Programs, Douyin, Kuaishou, Xiaohongshu, KuGou Music e QQ Music (README.md:1-28).
A versão atual do projeto é 3.1.3, conforme definido nos metadados do produto em wails.json. O autor é identificado como "putyy" com contato via putyy@qq.com. O projeto é distribuído sob uma licença open source, com repositório oficial hospedado no GitHub sob o namespace putyy/res-downloader (wails.json:1-20).
A motivação principal do projeto é democratizar o acesso à captura de recursos de rede. Diferente de ferramentas como Fiddler, Charles ou DevTools do navegador, que exigem conhecimento técnico avançado, o res-downloader oferece uma interface gráfica amigável com filtragem automática e apresentação organizada dos recursos capturados, tornando-o acessível para usuários sem perfil técnico (README.md:91-94).
Arquitetura e Stack Tecnológica
Stack Tecnológica Principal
| Componente | Tecnologia | Versão | Propósito |
|---|---|---|---|
| Backend | Go | 1.22.0+ | Lógica de negócio, proxy HTTP, download |
| Framework Desktop | Wails | v2.10.1 | Interface nativa multiplataforma |
| Proxy HTTP | goproxy (elazarl) | v1.7.2 | Interceptação de tráfego |
| Logging | zerolog | v1.33.0 | Logs estruturados de alta performance |
| HTTP Router | Echo v4 | v4.13.3 | Endpoints internos de API |
| ID Generation | go-nanoid | v2.1.0 | Identificadores únicos |
O projeto utiliza Go 1.22.0 como linguagem base com toolchain go1.23.2, garantindo compatibilidade com as features mais recentes da linguagem. A escolha do Wails v2 permite compilar para Windows, macOS e Linux a partir de uma única base de código, gerando binários nativos com baixo overhead de memória (go.mod:1-42).
Diagrama de Arquitetura de Módulos
正在加载图表渲染器...
Pontos-chave da arquitetura:
-
Separação de responsabilidades: A camada de interface (Wails WebView) comunica-se com o backend Go através do runtime bridge, mantendo a lógica de negócio isolada no backend (main.go:28-67)
-
Proxy interceptador: O módulo goproxy atua como middleman entre o navegador/aplicativos e a rede externa, capturando todo o tráfego HTTP/HTTPS
-
Pipeline de recursos: O fluxo segue: captura via proxy → filtragem no Resource Manager → download pelo File Downloader → persistência no filesystem
-
Configuração centralizada: O Config Manager gerencia preferências do usuário, diretórios de download e configurações de proxy (core/config.go:182-221)
Funcionalidades Principais
Recursos e Capacidades
O res-downloader oferece um conjunto abrangente de funcionalidades focadas em usabilidade e versatilidade:
-
Interface Intuitiva: Design limpo e organizado, com operações simplificadas que não exigem conhecimento técnico prévio (README.md:21-28)
-
Suporte Multiplataforma: Binários nativos para Windows, macOS e Linux, com tratamento específico para cada sistema operacional
-
Tipos de Recursos Suportados:
- Vídeos (MP4, WebM, etc.)
- Áudios (MP3, AAC, etc.)
- Imagens (JPG, PNG, WebP, etc.)
- Playlists m3u8/HLS
- Streams de transmissão ao vivo
-
Compatibilidade com Plataformas:
- WeChat Channels (视频号)
- Mini Programs (小程序)
- Douyin (抖音)
- Kuaishou (快手)
- Xiaohongshu (小红书)
- KuGou Music (酷狗音乐)
- QQ Music (QQ音乐)
- E outras plataformas web em geral (README-EN.md:22-29)
-
Proxy com Suporte a Upstream: Capacidade de configurar proxy upstream para acessar recursos em redes restritas
-
Descriptografia de Vídeos WeChat: Funcionalidade específica para descriptografar vídeos protegidos do WeChat Channels
Tabela de Compatibilidade de Recursos
| Tipo de Recurso | Captura | Download | Preview | Observações |
|---|---|---|---|---|
| Vídeo direto | ✓ | ✓ | ✓ | MP4, WebM, AVI |
| Áudio | ✓ | ✓ | ✓ | MP3, AAC, WAV |
| Imagens | ✓ | ✓ | ✓ | JPG, PNG, WebP, GIF |
| m3u8/HLS | ✓ | Parcial | Externo | Requer ferramenta externa para download completo |
| Live Stream | ✓ | Gravação | Externo | Recomendado uso de OBS para gravação |
| Vídeo WeChat | ✓ | ✓ | Após decrypt | Requer descriptografia pós-download |
Mecanismo de Funcionamento
Princípio de Operação
O res-downloader opera como um proxy HTTP/HTTPS local que intercepta todo o tráfego de rede do sistema. O princípio é similar ao do Fiddler e Charles, mas com uma camada de abstração que simplifica a experiência do usuário (README.md:91-94).
Fluxo de Uso
正在加载图表渲染器...
Etapas detalhadas do fluxo:
-
Inicialização: Ao iniciar, a aplicação configura o ambiente e prepara o servidor proxy (main.go:28-67)
-
Ativação do Proxy: O usuário ativa o proxy através da interface, configurando o sistema para rotear tráfego através de 127.0.0.1:8899 (README.md:48-57)
-
Instalação de Certificado: Para interceptar HTTPS, o usuário deve instalar o certificado raiz fornecido pela aplicação
-
Captura de Tráfego: Todo o tráfego HTTP/HTTPS passa pelo proxy, que analisa cada requisição
-
Filtragem Inteligente: O Resource Manager filtra apenas os recursos de interesse (vídeos, áudios, imagens), descartando outros tipos de conteúdo
-
Apresentação: Os recursos capturados são exibidos em lista organizada com metadados relevantes
-
Download: O usuário pode baixar recursos individuais ou em lote, com suporte a downloads multipart para arquivos grandes
Comparação com Ferramentas Similares
| Aspecto | res-downloader | Fiddler | Charles | DevTools |
|---|---|---|---|---|
| Facilidade de uso | Alta | Média | Média | Baixa |
| Filtragem automática | Sim | Manual | Manual | Manual |
| Interface em português | Sim | Não | Não | Parcial |
| Download integrado | Sim | Não | Não | Não |
| Suporte a m3u8 | Visualização | Não | Não | Não |
| Descriptografia WeChat | Sim | Não | Não | Não |
Estrutura de Módulos Core
Módulo File Downloader
O módulo de download (core/downloader.go) é responsável pelo download eficiente de arquivos com suporte a downloads multipart paralelos. A estrutura principal FileDownloader gerencia o ciclo de vida completo do download (core/downloader.go:55-279).
Estrutura de dados principal:
go1type FileDownloader struct { 2 Url string 3 FileName string 4 totalTasks int 5 IsMultiPart bool 6 RetryOnError bool 7 TotalSize int64 8 Headers map[string]string 9 DownloadTaskList []*DownloadTask 10 ctx context.Context 11 cancelFunc context.CancelFunc 12 ProxyUrl *url.URL 13 progressCallback func(totalDownloaded, totalSize float64, taskID int, taskPercentage float64) 14}
Responsabilidades do módulo:
-
Download Multipart: Divide arquivos grandes em chunks para download paralelo, melhorando significativamente a velocidade
-
Suporte a Proxy: Permite configurar proxy upstream para casos onde a rede direta não está disponível
-
Progress Callback: Sistema de callbacks para reportar progresso em tempo real à interface
-
Context Cancellation: Suporte a cancelamento gracioso de downloads em andamento
-
Headers Customizados: Permite passar headers específicos para requisições de download
Lógica de criação de tarefas:
O método createDownloadTasks() determina como o arquivo será dividido:
- Se
IsMultiPartfor true e o servidor suportar Range requests, o arquivo é dividido emtotalTaskspartes - O tamanho mínimo de cada parte é definido por
MinPartSizepara evitar overhead excessivo - Se o arquivo for muito pequeno, o número de tarefas é reduzido proporcionalmente
- Para downloads single-part, apenas uma tarefa é criada cobrindo todo o arquivo
Módulo HTTP Server
O módulo HTTP Server (core/http.go) implementa endpoints internos para comunicação com o frontend e funcionalidades auxiliares (core/http.go:55-376).
Endpoints principais:
| Endpoint | Método | Propósito |
|---|---|---|
/down-cert | GET | Download do certificado raiz SSL |
/preview | GET | Preview de recursos com suporte a Range requests |
/download | POST | Inicia download de recurso |
/cancel | POST | Cancela download em andamento |
/wx-file-decode | POST | Descriptografa vídeo do WeChat |
Implementação do endpoint de preview:
O endpoint de preview atua como um proxy reverso que busca o recurso remoto e o serve localmente, incluindo suporte a Range headers para streaming:
go1func (h *HttpServer) preview(w http.ResponseWriter, r *http.Request) { 2 realURL := r.URL.Query().Get("url") 3 // Validação e parsing da URL 4 parsedURL, err := url.Parse(realURL) 5 // Repasse de Range header para streaming 6 if rangeHeader := r.Header.Get("Range"); rangeHeader != "" { 7 request.Header.Set("Range", rangeHeader) 8 } 9 // Proxy da resposta com headers preservados 10}
Funcionalidades do servidor:
-
Download de Certificado: Serve o certificado público para instalação no sistema do usuário
-
Preview com Range Support: Permite streaming de vídeos grandes sem necessidade de download completo
-
Proxy de Recursos: Atua como intermediário para acessar recursos que podem ter restrições de CORS
-
API de Controle: Endpoints para iniciar, cancelar e gerenciar downloads
Módulo de Configuração
O módulo de configuração (core/config.go) gerencia todas as preferências do usuário e configurações do sistema (core/config.go:182-221).
Detecção de diretório de download:
O módulo detecta automaticamente o diretório de downloads apropriado para cada sistema operacional:
go1func getDefaultDownloadDir() string { 2 usr, err := user.Current() 3 homeDir := usr.HomeDir 4 5 switch runtime.GOOS { 6 case "windows", "darwin": 7 downloadDir = filepath.Join(homeDir, "Downloads") 8 case "linux": 9 downloadDir = filepath.Join(homeDir, "Downloads") 10 if xdgDir := os.Getenv("XDG_DOWNLOAD_DIR"); xdgDir != "" { 11 downloadDir = xdgDir 12 } 13 } 14}
Configurações gerenciadas:
- Host e Port do servidor proxy
- Tema da interface (claro/escuro)
- Locale para internacionalização
- Qualidade de recursos preferida
- Diretório de salvamento
- Comprimento de nomes de arquivo
- Formatação de timestamp em nomes
- Proxy upstream para redes restritas
Módulo Resource Manager
O módulo Resource Manager (core/resource.go) é responsável por gerenciar o ciclo de vida dos recursos capturados, incluindo filtragem, armazenamento em cache e orquestração de downloads (core/resource.go:99-138).
Responsabilidades:
-
Filtragem de Recursos: Analisa requisições capturadas e filtra apenas tipos de interesse
-
Deduplicação: Evita recursos duplicados na lista apresentada ao usuário
-
Metadados: Extrai e apresenta informações relevantes como tipo, tamanho, URL de origem
-
Orquestração de Download: Coordena com o File Downloader para processar solicitações de download
-
Cancelamento: Gerencia cancelamento de downloads em andamento
Estrutura de Diretórios
res-downloader/
├── main.go # Ponto de entrada da aplicação
├── wails.json # Configuração do Wails
├── go.mod # Dependências Go
├── go.sum # Checksums de dependências
├── build/ # Assets de build (ícones, etc.)
│ └── appicon.png
├── core/ # Módulos core do backend
│ ├── downloader.go # Lógica de download multipart
│ ├── http.go # Servidor HTTP interno
│ ├── config.go # Gerenciamento de configuração
│ ├── resource.go # Gerenciador de recursos
│ └── shared/
│ └── utils.go # Utilitários compartilhados
├── frontend/ # Interface web (HTML/CSS/JS)
└── docs/ # Documentação
└── images/
└── show.webp # Screenshot da aplicação
Cenários de Uso
Uso Primário: Captura de Mídia de Redes Sociais
O cenário mais comum é a captura de vídeos e imagens de plataformas de redes sociais chinesas que não oferecem funcionalidade nativa de download:
- Usuário ativa o proxy no res-downloader
- Abre o WeChat ou navegador acessando a plataforma desejada
- Navega até o conteúdo de interesse
- Retorna ao res-downloader para ver a lista de recursos capturados
- Seleciona e baixa os recursos desejados
Uso Secundário: Análise de Tráfego
Desenvolvedores podem utilizar a ferramenta para analisar requisições de rede de aplicações web, similar ao uso do DevTools mas com interface mais acessível.
Uso Terciário: Download de Streams
Para streams m3u8 e transmissões ao vivo, a ferramenta captura as URLs que podem ser processadas por ferramentas especializadas como OBS ou players dedicados.
Roteiro de Leitura do Relatório
正在加载图表渲染器...
Ordem recomendada de leitura:
- Visão Geral (página atual): Introdução ao projeto, stack tecnológica e funcionalidades
- Funcionalidades Detalhadas: Análise aprofundada de cada capacidade do sistema
- Arquitetura do Sistema: Design de módulos e padrões arquiteturais
- Fluxo de Dados: Diagramas de sequência e fluxo de dados entre componentes
- Design de API: Especificação de endpoints e contratos de interface
- Deploy e Build: Instruções de compilação e distribuição
Métricas e Capacidades Quantificáveis
| Métrica | Valor | Observação |
|---|---|---|
| Plataformas suportadas | 3 | Windows, macOS, Linux |
| Tipos de recursos | 5+ | Vídeo, áudio, imagem, m3u8, live stream |
| Plataformas de conteúdo compatíveis | 7+ | WeChat, Douyin, Kuaishou, Xiaohongshu, etc. |
| Conexões paralelas por download | Até 100 | Configurável via MaxIdleConnsPerHost |
| Versão atual | 3.1.3 | Conforme wails.json |
| Dependências diretas | 6 | Wails, goproxy, nanoid, zerolog, userdir, net |
| Dependências indiretas | 20+ | Incluindo Echo, UUID, etc. |
Considerações Técnicas
Requisitos de Sistema
- Sistema Operacional: Windows 10+, macOS 10.15+, ou Linux moderno
- Windows 7: Suportado apenas na versão 2.3.0 (Electron legacy)
- Rede: Acesso à internet com capacidade para configurar proxy do sistema
- Permissões: Direitos de administrador para instalação de certificado SSL
Limitações Conhecidas
-
m3u8: A ferramenta captura URLs mas não realiza download completo de playlists HLS; recomenda-se uso de ferramentas externas especializadas
-
Live Streams: Para gravação de transmissões ao vivo, o OBS é recomendado como solução complementar
-
HTTPS: Requer instalação manual do certificado raiz no sistema operacional
-
Proxy System-wide: Ao fechar a aplicação, o proxy do sistema pode não ser restaurado automaticamente, requerendo intervenção manual
Segurança e Privacidade
O projeto opera localmente sem enviar dados para servidores externos. Todo o processamento ocorre na máquina do usuário. O certificado SSL gerado é específico para a instância local e não deve ser compartilhado. O uso da ferramenta deve respeitar os termos de serviço das plataformas de conteúdo e legislação local de direitos autorais (README.md:97-100).
