github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/core/httpclient/post.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 cmdPost(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 //var contentType string 31 if p.IsMethod { 32 body = p.Stdin 33 34 //contentType, err = p.Parameters.String(1) 35 //if err != nil { 36 // return err 37 //} 38 } else { 39 body = nil 40 } 41 42 resp, err := Request(p.Context, "POST", url, body, p.Config, enableTimeout) 43 if err != nil { 44 return err 45 } 46 47 jHttp.Status.Code, _ = strconv.Atoi(resp.Status[:3]) 48 jHttp.Status.Message = resp.Status[4:] 49 50 jHttp.Headers = resp.Header 51 b, err := readall.ReadAll(p.Context, resp.Body) 52 resp.Body.Close() 53 jHttp.Body = string(b) 54 if err != nil { 55 return err 56 } 57 58 b, err = json.Marshal(jHttp, p.Stdout.IsTTY()) 59 if err != nil { 60 return err 61 } 62 63 _, err = p.Stdout.Write(b) 64 65 return err 66 }