Toolbox/goDataverse/connect/connect.go

158 lines
4.4 KiB
Go

/**
= Creative Commons Lizenzvertrag =
Diese Software ist von der archium GmbH, Gera ist lizenziert unter einer Creative Commons Namensnennung - Nicht kommerziell - Keine Bearbeitungen 4.0 International Lizenz. (http://creativecommons.org/licenses/by-nc-nd/4.0/deed.de)
Individuelle über diese Lizenz hinausgehende Berechtigungen können Sie unter https://archium.org erhalten.
= Creative Commons License =
Software by archium GmbH, Gera is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. (http://creativecommons.org/licenses/by-nc-nd/4.0/)
Individual permissions beyond the scope of this license may be available at https://archium.org.
**/
package connect
import (
"bytes"
"encoding/json"
"fmt"
"log"
// "log"
"io/ioutil"
"net/http"
"strings"
// "net/url"
def "Toolbox/defaults"
tol "Toolbox/goDataverse/tools"
)
func GetRequest(url string, params, header tol.ColMap) ([]byte, error) {
client := &http.Client{}
req, _ := http.NewRequest("GET", url, nil)
for k, v := range header {
req.Header.Add(k, v)
}
query := req.URL.Query()
for k, v := range params {
query.Add(k, v)
}
req.URL.RawQuery = query.Encode()
def.LogMessage("GetRequest(url.encode)", url, def.DEF_logdebg)
res, err := client.Do(req)
if err != nil {
def.LogError("GetRequest(do)", err)
} else {
defer res.Body.Close()
b, err := ioutil.ReadAll(res.Body)
if err == nil {
return b, err
}
}
return []byte(""), err
}
func GetRequestMap(_url string, params tol.ColMapInt, header tol.ColMap) ([]byte, error) {
client := &http.Client{}
// _url = _url + "&fq=(title:1)"
// _url = strings.Replace(_url, "*", `((title:2.+OR+title:Ebene))`, -1)
def.LogMessage("GetRequestMap(map)", _url, def.DEF_logdebg)
req, _ := http.NewRequest("GET", _url, nil)
for k, v := range header {
req.Header.Add(k, v)
}
query := req.URL.Query()
for _, ival := range params {
for k, v := range ival {
def.LogMessage("GetRequestMap(values)", fmt.Sprintf("%v: %v (%v)", k, v, ival), def.DEF_logdebg)
query.Add(k, v)
}
}
//
req.URL.RawQuery = query.Encode()
def.LogMessage("GetRequestmap(encode)", req.URL.String(), def.DEF_logdebg)
req.URL.RawQuery = strings.Replace(req.URL.RawQuery, "_q_=", "q=", -1)
def.LogMessage("GetRequestMap(replac)", req.URL.String(), def.DEF_logdebg)
res, err := client.Do(req)
if err == nil {
defer res.Body.Close()
b, err := ioutil.ReadAll(res.Body)
if err == nil {
return b, err
}
}
return []byte(""), err
}
func PostRequest(url string, params, header tol.ColMap) ([]byte, error) {
client := &http.Client{}
postData, err := json.Marshal(params)
def.LogMessage("PostRequest(data)", fmt.Sprintf("%v", postData), def.DEF_logdebg)
req, _ := http.NewRequest("POST", url, bytes.NewReader(postData))
if err == nil {
for k, v := range header {
req.Header.Add(k, v)
}
res, err := client.Do(req)
if err == nil {
defer res.Body.Close()
b, err := ioutil.ReadAll(res.Body)
if err == nil {
return b, err
}
}
}
return []byte(""), err
}
func PostRequestB(url string, postData []byte, header tol.ColMap) ([]byte, error) {
client := &http.Client{}
req, err := http.NewRequest("POST", url, bytes.NewReader(postData))
if err == nil {
for k, v := range header {
req.Header.Add(k, v)
}
res, err := client.Do(req)
if err == nil {
defer res.Body.Close()
b, err := ioutil.ReadAll(res.Body)
return b, err
}
}
return []byte(""), err
}
func DeleteRequest(url string, header tol.ColMap) ([]byte, error) {
client := &http.Client{}
req, _ := http.NewRequest("DELETE", url, nil)
for k, v := range header {
req.Header.Add(k, v)
}
def.LogMessage("DeleteRequest(url)", req.URL.String(), def.DEF_logdebg)
res, _ := client.Do(req)
//def.LogMessage("DeleteRequest(do)", res.Request.Header., def.DEF_logdebg)
b, err := ioutil.ReadAll(res.Body)
res.Body.Close()
return b, err
}
func Redirect(_w http.ResponseWriter, _r *http.Request, _url string) {
// remove/add not default ports from _r.Host
target := _url
// if len(_r.URL.RawQuery) > 0 {
// target += "?" + _r.URL.RawQuery
// }
log.Printf("redirect to: %s", target)
reponse, err := http.Get(_url)
body, err := ioutil.ReadAll(reponse.Body)
if err != nil {
panic(err)
}
fmt.Println("response body", reponse.Body)
_w.Write(body)
log.Printf("redirect to: %s, %v, %v", target, string(body), err)
//http.Redirect(_w, _r, target, http.StatusSeeOther)
}