func parseArgs(fset *flag.FlagSet, args []string) (*params, error) { var p params var printHeaders, noBody, noCookies bool fset.BoolVar(&p.json, "j", false, "serialize data items as a JSON object") fset.BoolVar(&p.json, "json", false, "") fset.BoolVar(&p.form, "f", false, "serialize data items as form values") fset.BoolVar(&p.form, "form", false, "") fset.BoolVar(&printHeaders, "h", false, "print the response headers") fset.BoolVar(&printHeaders, "headers", false, "") fset.BoolVar(&noBody, "B", false, "do not print response body") fset.BoolVar(&noBody, "body", false, "") fset.BoolVar(&p.debug, "debug", false, "print debugging messages") fset.BoolVar(&p.noBrowser, "W", false, "do not open macaroon-login URLs in web browser") fset.BoolVar(&p.noBrowser, "no-browser", false, "") fset.BoolVar(&p.raw, "raw", false, "print response body without any JSON post-processing") fset.StringVar(&p.basicAuth, "a", "", "http basic auth (username:password)") fset.StringVar(&p.basicAuth, "auth", "", "") fset.BoolVar(&p.insecure, "insecure", false, "skip HTTPS certificate checking") fset.StringVar(&p.cookieFile, "cookiefile", filepath.Join(os.Getenv("HOME"), ".go-cookies"), "file to store persistent cookies in") fset.BoolVar(&noCookies, "C", false, "disable cookie storage") fset.BoolVar(&noCookies, "no-cookies", false, "") fset.BoolVar(&p.useStdin, "stdin", false, "read request body from standard input") // TODO --file (multipart upload) // TODO --timeout // TODO --proxy // TODO (??) --verify fset.Usage = func() { fmt.Fprint(os.Stderr, helpMessage) fset.PrintDefaults() } if err := fset.Parse(true, args); err != nil { return nil, err } if noCookies { p.cookieFile = "" } p.headers = printHeaders p.body = !noBody args = fset.Args() if len(args) == 0 { return nil, errUsage } if isMethod(args[0]) { p.method, args = strings.ToUpper(args[0]), args[1:] if len(args) == 0 { return nil, errUsage } } urlStr := args[0] if strings.HasPrefix(urlStr, ":") { // shorthand for localhost. if strings.HasPrefix(urlStr, ":/") { urlStr = "http://localhost" + urlStr[1:] } else { urlStr = "http://localhost" + urlStr } } if !strings.HasPrefix(urlStr, "http:") && !strings.HasPrefix(urlStr, "https:") { urlStr = "http://" + urlStr } u, err := url.Parse(urlStr) if err != nil { return nil, fmt.Errorf("invalid URL %q: %v", args[0], err) } if u.Host == "" { u.Host = "localhost" } p.url, args = u, args[1:] p.keyVals = make([]keyVal, len(args)) for i, arg := range args { kv, err := parseKeyVal(arg) if err != nil { return nil, fmt.Errorf("cannot parse %q: %v", arg, err) } if kv.sep == "=" && p.method == "" { p.method = "POST" } p.keyVals[i] = kv } if p.method == "" { p.method = "GET" } return &p, nil }