package main import ( "fmt" "net/http" "flag" "log" "os" "io" "path/filepath" ) func main() { var save bool var headers bool flag.BoolVar(&save, "O", false, "output file to local disk") flag.BoolVar(&headers, "I", false, "inspect headers") flag.Parse() if flag.NArg() == 0 { log.Fatal("USAGE: curl [-O] [-I] URL") } target_url := flag.Args()[0] resp, err := http.Get(target_url) if err != nil { log.Fatal(err) } if headers { for key, values := range resp.Header { for _, val := range values { fmt.Printf("%s: %s\n", key, val) } } } else if save { output := filepath.Base(resp.Request.URL.Path) out, err := os.Create(output) if err != nil { log.Fatal(err) } io.Copy(out, resp.Body) } else { io.Copy(os.Stdout, resp.Body) } }