Jak przesłać plik na sto serwerów hostingowych jednym kliknięciem bez pośredników
Prawdopodobnie zdarzyło Ci się udostępniać ciężkie archiwum, kompilację oprogramowania lub wideo na wielu serwerach hostingowych. Robienie tego ręcznie przez karty przeglądarki to czysta tortura. Najpierw czekasz na przesłanie do jednej usługi, potem kopiujesz link, otwierasz drugą, rozwiązujesz captchę i tak w kółko.
Zazwyczaj w takich sytuacjach ludzie korzystają z internetowych multi-uploaderów takich jak Mirrored.to czy MultiUp. Ale mają one swoje problemy: restrykcyjne limity rozmiaru plików dla darmowych użytkowników, obowiązkowa rejestracja dla połowy funkcji, nachalne reklamy, a co najważniejsze — Twoje pliki najpierw trafiają na czyjś pośredni serwer.
Niedawno natknąłem się na ciekawy projekt o nazwie PolyUploader. To otwarta aplikacja desktopowa, która pobiera plik z dysku (lub pobiera go przez bezpośredni link) i jednocześnie wysyła go na wybrane serwery bezpośrednio z Twojego komputera.
Co potrafi PolyUploader
Główna funkcja programu jest prosta: wybierasz plik, zaznaczasz desired services i uruchamiasz proces. Lista obsługiwanych serwerów jest imponująca — w tabeli repozytorium jest ich 133. Znajdują się tam popularne usługi takie jak Gofile, 1fichier, Turbobit, Catbox i Pixeldrain, a także wyspecjalizowane serwery wideo jak DoodStream, StreamWish czy Voe.
Oto kilka praktycznych funkcji, które autor wbudował w architekturę:
- Przesyłanie bez kont. Spośród 133 serwerów 96 działa w pełni anonimowo. Bez rejestracji ani logowania, nacisnąłeś przycisk — masz link.
- Podłącz własne klucze API. Jeśli masz konto premium lub osobiste na 1fichier, KrakenFiles lub Nitroflare, możesz wprowadzić klucze w ustawieniach. Wtedy przesyłanie trafia do Twojego osobistego profilu z Twoimi limitami.
- Ochrona linków i pakiety. Po przesłaniu aplikacja zbiera otrzymane linki w jedną listę. Możesz spakować ją w jeden czysty link lub zaszyfrować przez PrivateBin, Cryptgeon, SafeLinking lub Filecrypt.
- Profile przesyłania. Aby nie klikać za każdym razem przez dziesiątki pól wyboru, zestawy serwerów są zapisywane jako osobne presety dla różnych zadań.
- Lokalna historia. PolyUploader pamięta, gdzie i kiedy przesłałeś pliki, pokazuje przybliżony czas wygaśnięcia linku i udostępnia szybki przycisk usuwania, jeśli serwer to obsługuje.
Zrzuty ekranu interfejsu
Jak to działa pod maską
Projekt jest zbudowany na Tauri. Interfejs użytkownika jest wykonany standardowym stosem webowym z użyciem Tailwind CSS, podczas gdy logika systemowa, sieciowa i operacje na plikach działają w backendzie Rust.
Dzięki temu aplikacja jest lekka i zużywa minimalnie RAM w porównaniu z alternatywami opartymi na Electron.
Najciekawsze rozwiązanie inżynieryjne tutaj wiąże się z ograniczeniami silnika przeglądarki. Gdy interfejs webowy wysyła żądania bezpośrednio do stu zewnętrznych stron, natychmiast napotyka błędy CORS i problemy z plikami cookie między stronami.
Autor rozwiązał to elegancko. Lokalny serwer proxy HTTP oparty na bibliotece warp-cors jest osadzony wewnątrz backendu Rust. Gdy aplikacja się uruchamia, lekki serwer włącza się na porcie 61337.
// Запуск прокси warp-cors в фоновом рантайме
use tokio::runtime::Builder;
use warp_cors::app::{Config, run};
fn main() {
std::thread::spawn(|| {
let rt = Builder::new_multi_thread()
.enable_all()
.build()
.unwrap();
let cfg = Config { host: "127.0.0.1".into(), port: 61337 };
rt.block_on(run(cfg));
});
}
Frontend po prostu wysyła żądania przez lokalny adres:
const proxy = "http://127.0.0.1:61337/";
upload_to_host([
proxy + "https://upload.gofile.io/uploadfile/",
"POST",
sent_data_form
]);
Proxy przekazuje ruch do docelowej strony, podstawia niezbędne nagłówki i zwraca odpowiedź do interfejsu. Bez żonglowania zasadami bezpieczeństwa przeglądarki.
Druga strona medalu
Autor szczerze przyznaje w README, że rozwija projekt sam w wolnym czasie poza studiami. A utrzymywanie ponad stu serwerów w sprawności to wyczerpująca praca.
Wiele stron nie ma oficjalnego API. Aby przesłać plik na nie, trzeba emulować zachowanie przeglądarki, parsować skrypty formularzy i konwertować żądania cURL na kod. Gdy tylko usługa zmieni swój układ lub zabezpieczenia, przesyłanie się psuje do następnej poprawki.
Ponadto aplikacja obecnie nie może obsłużyć partii różnych lokalnych plików w kolejce do przetwarzania wsadowego. Bierzesz jeden konkretny plik i replikujesz go na dziesiątki mirrorów.
Projekt zawiera anonimową telemetrię. Aplikacja wysyła na serwer autora tylko nazwę serwera i datę przesłania dla zagregowanych statystyk, bez ścieżek plików ani finalnych linków. Jeśli zasadniczo sprzeciwiasz się aktywności sieciowej oprogramowania, kod API jest również otwarty na GitHub, więc możesz łatwo zweryfikować logikę samodzielnie.
Jak wypróbować
Najłatwiejszy sposób to sprawdzenie sekcji Releases repozytorium. Znajdują się tam wstępnie zbudowane pakiety dla Windows (instalator), Linux (AppImage, pakiety deb, rpm) i macOS (obraz dmg).
Jeśli chcesz zbudować plik binarny samodzielnie, potrzebujesz zainstalowanego Rust i Tauri CLI:
git clone https://github.com/spel987/PolyUploader.git
cd PolyUploader
cargo install tauri-cli
cargo tauri build
Gotowy instalator pojawi się w katalogu src-tauri/target/release/bundle.
Dla kogo to będzie przydatne
Projekt znajdzie swoje miejsce u osób regularnie przesyłających wydania oprogramowania, zrzuty danych, pliki multimedialne lub kopie zapasowe i chcących mieć niezawodne mirrorki na wypadek, gdyby główna pamięć masowa przestała działać.
PolyUploader eliminuje potrzebę powierzania danych zewnętrznym mirrorom internetowym i oszczędza mnóstwo rutynowej pracy. Jeśli projekt przykuł Twoją uwagę, daj autorowi gwiazdkę na GitHub — samodzielne utrzymywanie takiej bazy serwerów naprawdę wymaga ogromnej cierpliwości.
Powiązane projekty