github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/core/httpclient/get.go (about) 1 package httpclient 2 3 import ( 4 "errors" 5 "io" 6 "strconv" 7 8 "github.com/lmorg/murex/lang" 9 "github.com/lmorg/murex/lang/types" 10 "github.com/lmorg/murex/utils/json" 11 "github.com/lmorg/murex/utils/readall" 12 ) 13 14 func cmdGet(p *lang.Process) (err error) { 15 p.Stdout.SetDataType(types.Json) 16 17 if p.Parameters.Len() == 0 { 18 return errors.New("URL required") 19 } 20 21 var jHttp jsonHttp 22 23 url, err := p.Parameters.String(0) 24 if err != nil { 25 return err 26 } 27 validateURL(&url, p.Config) 28 29 var body io.Reader 30 if p.IsMethod { 31 body = p.Stdin 32 } else { 33 body = nil 34 } 35 36 resp, err := Request(p.Context, "GET", url, body, p.Config, enableTimeout) 37 if err != nil { 38 return err 39 } 40 41 jHttp.Status.Code, _ = strconv.Atoi(resp.Status[:3]) 42 jHttp.Status.Message = resp.Status[4:] 43 44 jHttp.Headers = resp.Header 45 46 b, err := readall.ReadAll(p.Context, resp.Body) 47 resp.Body.Close() 48 jHttp.Body = string(b) 49 if err != nil { 50 return err 51 } 52 53 b, err = json.Marshal(jHttp, p.Stdout.IsTTY()) 54 if err != nil { 55 return err 56 } 57 58 _, err = p.Stdout.Write(b) 59 return err 60 }