53 lines
1.1 KiB
Go
53 lines
1.1 KiB
Go
package helper
|
|
|
|
import (
|
|
"encoding/json"
|
|
"io/ioutil"
|
|
"net/http"
|
|
"strings"
|
|
)
|
|
|
|
func JSONWebRequest(url string) interface{} {
|
|
Log.Noticef("requesting url via GET %s", url)
|
|
|
|
resp, err := http.Get(url)
|
|
if err != nil {
|
|
Log.Panicf("could not get url '%s': %s", url, err)
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
body, err := ioutil.ReadAll(resp.Body)
|
|
if err != nil {
|
|
Log.Panicf("could not read body from url '%s': %s", url, err)
|
|
}
|
|
|
|
Log.Debugf("output from url '%s':\n%s", url, string(body))
|
|
|
|
if resp.StatusCode >= 400 {
|
|
Log.Panicf("bad status '%d - %s' from url '%s'", resp.StatusCode, resp.Status, url)
|
|
}
|
|
|
|
contentType := resp.Header.Get("Content-Type")
|
|
|
|
if strings.Contains(contentType, "json") {
|
|
|
|
} else {
|
|
Log.Panicf("is not json '%s' from url '%s'", contentType, url)
|
|
}
|
|
|
|
jsonMap := make(map[string]interface{})
|
|
err = json.Unmarshal(body, &jsonMap)
|
|
if err == nil {
|
|
return jsonMap
|
|
}
|
|
|
|
jsonArrayMap := make([]map[string]interface{}, 0)
|
|
err = json.Unmarshal(body, &jsonArrayMap)
|
|
if err == nil {
|
|
return jsonArrayMap
|
|
}
|
|
|
|
Log.Panicf("could not read json from '%s': invalid type", url)
|
|
return nil
|
|
}
|