1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
package main
import (
"crypto/tls"
"flag"
"github.com/htcat/htcat"
"log"
"net/http"
"net/url"
"os"
"runtime"
)
const version = "1.0.2"
var onlyPrintVersion = flag.Bool("version", false, "print the htcat version")
const (
_ = iota
KB int64 = 1 << (10 * iota)
MB
GB
TB
PB
EB
)
func printUsage() {
log.Printf("usage: %v URL", os.Args[0])
}
func main() {
flag.Parse()
args := flag.Args()
if *onlyPrintVersion {
os.Stdout.Write([]byte(version + "\n"))
os.Exit(0)
}
if len(args) != 1 {
printUsage()
log.Fatalf("aborting: incorrect usage")
}
u, err := url.Parse(args[0])
if err != nil {
log.Fatalf("aborting: could not parse given URL: %v", err)
}
client := *http.DefaultClient
// Only support HTTP and HTTPS schemes
switch u.Scheme {
case "https":
client.Transport = &http.Transport{
TLSClientConfig: &tls.Config{},
}
case "http":
default:
// This error path can be hit with common alphanumeric
// lexemes like "help", which also parse as URLs,
// which makes this error message somewhat
// incomprehensible. Try to help out a user by
// printing the usage here.
printUsage()
log.Fatalf("aborting: unsupported URL scheme %v", u.Scheme)
}
// On fast links (~= saturating gigabit), parallel execution
// gives a large speedup.
runtime.GOMAXPROCS(runtime.NumCPU())
// Begin the GET.
htc := htcat.New(&client, u, 5)
if _, err := htc.WriteTo(os.Stdout); err != nil {
log.Fatalf("aborting: could not write to output stream: %v",
err)
}
}
|