mirror of
https://github.com/buger/goreplay.git
synced 2024-04-21 12:32:02 +00:00
206 lines
4.5 KiB
Go
206 lines
4.5 KiB
Go
package gou
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"io"
|
|
"io/ioutil"
|
|
"net/http"
|
|
"net/url"
|
|
)
|
|
|
|
// Simple Fetch Wrapper, given a url it returns bytes
|
|
func Fetch(url string) (ret []byte, err error) {
|
|
resp, err := http.Get(url)
|
|
defer func() {
|
|
if resp != nil && resp.Body != nil {
|
|
resp.Body.Close()
|
|
}
|
|
}()
|
|
if err != nil {
|
|
Log(WARN, err.Error())
|
|
return
|
|
}
|
|
ret, err = ioutil.ReadAll(resp.Body)
|
|
if err != nil {
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
// Simple Fetch Wrapper, given a url it returns bytes and response
|
|
func FetchResp(url string) (ret []byte, err error, resp *http.Response) {
|
|
resp, err = http.Get(url)
|
|
defer func() {
|
|
if resp != nil && resp.Body != nil {
|
|
resp.Body.Close()
|
|
}
|
|
}()
|
|
if err != nil {
|
|
Log(WARN, err.Error())
|
|
}
|
|
if resp == nil || resp.Body == nil {
|
|
return
|
|
}
|
|
ret, err = ioutil.ReadAll(resp.Body)
|
|
return
|
|
}
|
|
|
|
// Simple Fetch Wrapper, given a url it returns Helper, error
|
|
// Sends as type application/json, interprets whatever datatype is sent in appropriately
|
|
func JsonHelperHttp(method, urlStr string, data interface{}) (JsonHelper, error) {
|
|
var body io.Reader
|
|
if data != nil {
|
|
switch val := data.(type) {
|
|
case string:
|
|
body = bytes.NewReader([]byte(val))
|
|
case io.Reader:
|
|
body = val
|
|
case url.Values:
|
|
body = bytes.NewReader([]byte(val.Encode()))
|
|
default:
|
|
by, err := json.Marshal(data)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
body = bytes.NewReader(by)
|
|
}
|
|
|
|
}
|
|
req, err := http.NewRequest(method, urlStr, body)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
req.Header.Add("Accept", "application/json")
|
|
|
|
resp, err := http.DefaultClient.Do(req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer resp.Body.Close()
|
|
jh, err := NewJsonHelperReader(resp.Body)
|
|
return jh, err
|
|
}
|
|
|
|
// posts an application/json to url with body
|
|
// ie: type = application/json
|
|
func PostJson(postUrl string, data interface{}) (ret string, err error, resp *http.Response) {
|
|
var buf io.Reader
|
|
if data != nil {
|
|
switch val := data.(type) {
|
|
case string:
|
|
buf = bytes.NewBufferString(val)
|
|
case []byte:
|
|
buf = bytes.NewReader(val)
|
|
case json.RawMessage:
|
|
buf = bytes.NewReader([]byte(val))
|
|
case io.Reader:
|
|
buf = val
|
|
case url.Values:
|
|
buf = bytes.NewBufferString(val.Encode())
|
|
default:
|
|
by, err := json.Marshal(data)
|
|
if err != nil {
|
|
return "", err, nil
|
|
}
|
|
buf = bytes.NewReader(by)
|
|
}
|
|
}
|
|
|
|
resp, err = http.Post(postUrl, "application/json", buf)
|
|
defer func() {
|
|
if resp != nil && resp.Body != nil {
|
|
resp.Body.Close()
|
|
}
|
|
}()
|
|
if err != nil {
|
|
Log(WARN, err.Error())
|
|
return "", err, resp
|
|
}
|
|
bodyBytes, err := ioutil.ReadAll(resp.Body)
|
|
if err != nil {
|
|
return "", err, resp
|
|
}
|
|
|
|
return string(bodyBytes), nil, resp
|
|
}
|
|
|
|
// issues http delete an application/json to url with body
|
|
func DeleteJson(url, body string) (ret string, err error, resp *http.Response) {
|
|
//Post(url string, bodyType string, body io.Reader)
|
|
buf := bytes.NewBufferString(body)
|
|
Debug(buf.Len())
|
|
req, err := http.NewRequest("DELETE", url, buf)
|
|
if err != nil {
|
|
Debug(err)
|
|
return
|
|
}
|
|
|
|
req.Header.Add("Content-Type", "application/json")
|
|
resp, err = http.DefaultClient.Do(req) //(url, "application/json", buf)
|
|
defer func() {
|
|
if resp != nil && resp.Body != nil {
|
|
resp.Body.Close()
|
|
}
|
|
}()
|
|
if err != nil {
|
|
Log(WARN, err.Error())
|
|
return "", err, resp
|
|
}
|
|
data, err := ioutil.ReadAll(resp.Body)
|
|
if err != nil {
|
|
return "", err, resp
|
|
}
|
|
|
|
return string(data), nil, resp
|
|
}
|
|
|
|
// posts a www-form encoded form to url with body
|
|
func PostForm(url, body string) (ret string, err error, resp *http.Response) {
|
|
//Post(url string, bodyType string, body io.Reader)
|
|
buf := bytes.NewBufferString(body)
|
|
resp, err = http.Post(url, "application/x-www-form-urlencoded", buf)
|
|
defer func() {
|
|
if resp != nil && resp.Body != nil {
|
|
resp.Body.Close()
|
|
}
|
|
}()
|
|
if err != nil {
|
|
Log(WARN, url, " ", body, " ", err.Error())
|
|
return "", err, resp
|
|
}
|
|
data, err := ioutil.ReadAll(resp.Body)
|
|
if err != nil {
|
|
return "", err, resp
|
|
}
|
|
|
|
return string(data), nil, resp
|
|
}
|
|
|
|
// issues http put an application/json to url with optional body
|
|
func PutJson(url, body string) (ret string, err error, resp *http.Response) {
|
|
buf := bytes.NewBufferString(body)
|
|
req, err := http.NewRequest("PUT", url, buf)
|
|
if err != nil {
|
|
Debug(err)
|
|
return
|
|
}
|
|
req.Header.Add("Content-Type", "application/json")
|
|
resp, err = http.DefaultClient.Do(req)
|
|
defer func() {
|
|
if resp != nil && resp.Body != nil {
|
|
resp.Body.Close()
|
|
}
|
|
}()
|
|
if err != nil {
|
|
Log(WARN, err.Error())
|
|
return "", err, resp
|
|
}
|
|
data, err := ioutil.ReadAll(resp.Body)
|
|
if err != nil {
|
|
return "", err, resp
|
|
}
|
|
|
|
return string(data), nil, resp
|
|
}
|