Preços

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

ComponenteTecnologiaVersãoPropósito
BackendGo1.22.0+Lógica de negócio, proxy HTTP, download
Framework DesktopWailsv2.10.1Interface nativa multiplataforma
Proxy HTTPgoproxy (elazarl)v1.7.2Interceptação de tráfego
Loggingzerologv1.33.0Logs estruturados de alta performance
HTTP RouterEcho v4v4.13.3Endpoints internos de API
ID Generationgo-nanoidv2.1.0Identificadores ú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:

  1. 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)

  2. Proxy interceptador: O módulo goproxy atua como middleman entre o navegador/aplicativos e a rede externa, capturando todo o tráfego HTTP/HTTPS

  3. Pipeline de recursos: O fluxo segue: captura via proxy → filtragem no Resource Manager → download pelo File Downloader → persistência no filesystem

  4. 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 RecursoCapturaDownloadPreviewObservações
Vídeo diretoMP4, WebM, AVI
ÁudioMP3, AAC, WAV
ImagensJPG, PNG, WebP, GIF
m3u8/HLSParcialExternoRequer ferramenta externa para download completo
Live StreamGravaçãoExternoRecomendado uso de OBS para gravação
Vídeo WeChatApós decryptRequer 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:

  1. Inicialização: Ao iniciar, a aplicação configura o ambiente e prepara o servidor proxy (main.go:28-67)

  2. 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)

  3. Instalação de Certificado: Para interceptar HTTPS, o usuário deve instalar o certificado raiz fornecido pela aplicação

  4. Captura de Tráfego: Todo o tráfego HTTP/HTTPS passa pelo proxy, que analisa cada requisição

  5. Filtragem Inteligente: O Resource Manager filtra apenas os recursos de interesse (vídeos, áudios, imagens), descartando outros tipos de conteúdo

  6. Apresentação: Os recursos capturados são exibidos em lista organizada com metadados relevantes

  7. Download: O usuário pode baixar recursos individuais ou em lote, com suporte a downloads multipart para arquivos grandes

Comparação com Ferramentas Similares

Aspectores-downloaderFiddlerCharlesDevTools
Facilidade de usoAltaMédiaMédiaBaixa
Filtragem automáticaSimManualManualManual
Interface em portuguêsSimNãoNãoParcial
Download integradoSimNãoNãoNão
Suporte a m3u8VisualizaçãoNãoNãoNão
Descriptografia WeChatSimNãoNãoNã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:

go
1type 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:

  1. Download Multipart: Divide arquivos grandes em chunks para download paralelo, melhorando significativamente a velocidade

  2. Suporte a Proxy: Permite configurar proxy upstream para casos onde a rede direta não está disponível

  3. Progress Callback: Sistema de callbacks para reportar progresso em tempo real à interface

  4. Context Cancellation: Suporte a cancelamento gracioso de downloads em andamento

  5. 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 IsMultiPart for true e o servidor suportar Range requests, o arquivo é dividido em totalTasks partes
  • O tamanho mínimo de cada parte é definido por MinPartSize para 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:

EndpointMétodoPropósito
/down-certGETDownload do certificado raiz SSL
/previewGETPreview de recursos com suporte a Range requests
/downloadPOSTInicia download de recurso
/cancelPOSTCancela download em andamento
/wx-file-decodePOSTDescriptografa 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:

go
1func (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:

  1. Download de Certificado: Serve o certificado público para instalação no sistema do usuário

  2. Preview com Range Support: Permite streaming de vídeos grandes sem necessidade de download completo

  3. Proxy de Recursos: Atua como intermediário para acessar recursos que podem ter restrições de CORS

  4. 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:

go
1func 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:

  1. Filtragem de Recursos: Analisa requisições capturadas e filtra apenas tipos de interesse

  2. Deduplicação: Evita recursos duplicados na lista apresentada ao usuário

  3. Metadados: Extrai e apresenta informações relevantes como tipo, tamanho, URL de origem

  4. Orquestração de Download: Coordena com o File Downloader para processar solicitações de download

  5. 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:

  1. Usuário ativa o proxy no res-downloader
  2. Abre o WeChat ou navegador acessando a plataforma desejada
  3. Navega até o conteúdo de interesse
  4. Retorna ao res-downloader para ver a lista de recursos capturados
  5. 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:

  1. Visão Geral (página atual): Introdução ao projeto, stack tecnológica e funcionalidades
  2. Funcionalidades Detalhadas: Análise aprofundada de cada capacidade do sistema
  3. Arquitetura do Sistema: Design de módulos e padrões arquiteturais
  4. Fluxo de Dados: Diagramas de sequência e fluxo de dados entre componentes
  5. Design de API: Especificação de endpoints e contratos de interface
  6. Deploy e Build: Instruções de compilação e distribuição

Métricas e Capacidades Quantificáveis

MétricaValorObservação
Plataformas suportadas3Windows, macOS, Linux
Tipos de recursos5+Vídeo, áudio, imagem, m3u8, live stream
Plataformas de conteúdo compatíveis7+WeChat, Douyin, Kuaishou, Xiaohongshu, etc.
Conexões paralelas por downloadAté 100Configurável via MaxIdleConnsPerHost
Versão atual3.1.3Conforme wails.json
Dependências diretas6Wails, goproxy, nanoid, zerolog, userdir, net
Dependências indiretas20+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

  1. m3u8: A ferramenta captura URLs mas não realiza download completo de playlists HLS; recomenda-se uso de ferramentas externas especializadas

  2. Live Streams: Para gravação de transmissões ao vivo, o OBS é recomendado como solução complementar

  3. HTTPS: Requer instalação manual do certificado raiz no sistema operacional

  4. 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).