https://github.com/setanarut/indir
Go ile yazılmış çok bağlantılı HTTP dosya indirici paketi.
https://github.com/setanarut/indir
clt downloader go http
Last synced: about 14 hours ago
JSON representation
Go ile yazılmış çok bağlantılı HTTP dosya indirici paketi.
- Host: GitHub
- URL: https://github.com/setanarut/indir
- Owner: setanarut
- License: mit
- Created: 2026-06-28T06:15:49.000Z (9 days ago)
- Default Branch: main
- Last Pushed: 2026-06-28T06:34:27.000Z (9 days ago)
- Last Synced: 2026-06-28T08:10:34.475Z (9 days ago)
- Topics: clt, downloader, go, http
- Language: Go
- Homepage:
- Size: 9.77 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# indir
Go ile yazılmış çok bağlantılı HTTP dosya indirici paketi.
## Özellikler
- **`-s` (segments)** — dosyayı N parçaya böler, her parça ayrı goroutine'de indirilir
- **`-x` (connections)** — aynı anda maksimum N bağlantı kullanır
- **Resume** — Ctrl-C ile duraklatınca durum `.dstate` dosyasına kaydedilir; aynı komutla kaldığı yerden devam eder
- **Progress** — yüzde, hız (EMA), kalan süre (ETA) tek satırda gösterilir
- **Range yoksa tek bağlantı** — sunucu `Accept-Ranges` başlığı göndermiyorsa otomatik fallback
## Paket olarak kullanım
```go
import "github.com/setanarut/indir"
d := indir.New(indir.Config{
URL: "https://example.com/file.iso",
OutputPath: "file.iso",
MaxConnections: 4, // -x 4
Segments: 8, // -s 8
})
if err := d.Download(); err != nil {
log.Fatal(err)
}
```
## Dosya yapısı
```
indir/
├── indir.go # Config, Downloader, Download(), HTTP mantığı
├── segment.go # segment tipi, splitSegments()
├── state.go # JSON kayıt/yükleme (.dstate dosyası)
├── progress.go # terminal ilerleme çubuğu, formatlayıcılar
└── go.mod
```
## Nasıl çalışır
### Parçalama
```
[0 ─────────── 249 MB] segment 0 ─┐
[250 ─────────── 499 MB] segment 1 ├─ eşzamanlı
[500 ─────────── 749 MB] segment 2 ┤
[750 ─────────── 999 MB] segment 3 ─┘
Tamamlandığında → file.iso olarak birleştirilir
```
### Resume
Her segment `.file.iso.part0`, `.file.iso.part1`, … temp dosyasına indirilir.
Duraklatıldığında `.file.iso.dstate` JSON dosyasına her segmentin ne kadar indirildiği kaydedilir.
Tekrar başlatıldığında state dosyası okunur, disk üzerindeki temp dosya boyutları doğrulanır, eksik kısımlar `Range: bytes=N-M` başlığıyla indirilir.
### İlerleme çıktısı örneği
```
[████████████░░░░░░░░░░░░░░░░] 42.3% 422.34 MB / 1.00 GB 9.15 MB/s ETA 1m1s
```