123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- package etc
- import (
- "bytes"
- "encoding/json"
- "errors"
- "fmt"
- "io"
- "io/ioutil"
- "mime/multipart"
- "net/http"
- "net/url"
- "os"
- "path/filepath"
- "runtime"
- "strconv"
- "strings"
- time "time"
- )
- func GetHttpResponseSimplePost(method string, apiurl string, jsBytes []byte) (retbody []byte, retsta []byte, reterr error) {
- response, err := http.Post(apiurl, "application/json", bytes.NewBuffer(jsBytes))
- if err != nil {
- fmt.Printf("The HTTP request failed with error %s\n", err)
- } else {
- retbody, _ = ioutil.ReadAll(response.Body)
- }
- return retbody, []byte(strconv.Itoa(response.StatusCode)), nil
- }
- func GetHttpResponse(method string, apiurl string, jsBytes []byte) ([]byte, []byte, error) {
- reader := bytes.NewBuffer(jsBytes)
- req, err := http.NewRequest(method, apiurl, reader)
- if err != nil {
- return nil, []byte("909"), MyErr("WERZDSVADFZ-http.NewRequest", err, false)
- }
- req.Header.Add("Content-Type", "application/json")
- req.Header.Add("Accept", "application/json")
- req.Header.Add("Endpoint-Agent", "abango-rest-api-v1.0")
- req.Header.Add("Accept-Language", "en-US")
- req.Header.Add("User-Agent", runtime.GOOS+"-"+runtime.Version()) // for checking OS Type in Server
- // 들어가지 않으면 Request Reject 됨. //Go 에서는 SERVER_NAME 을 구할 방법이 없다. 아직까지는
- req.Header.Add("FrontendHost", "localhost:normal")
- req.Header.Add("RemoteIp", "localhost")
- req.Header.Add("Referer", "http://localhost")
- req.Header.Add("DeviceDesc", "API-Developer-Device")
- i := len(os.Args)
- if i != 1 { // 1일 경우는 go function call 의 경우 이므로 memory fault 가 난다.
- gateToken := os.Args[i-2]
- if len(gateToken) == 20 { // Argument 뒤에서 2번째 Arg가 20자리이면 GateToken 이라고 간주
- req.Header.Add("GateToken", gateToken)
- }
- }
- req.Body = ioutil.NopCloser(bytes.NewReader(jsBytes))
- // Client객체에서 Request 실행
- client := &http.Client{
- Timeout: time.Second * 3600, //Otherwirse, it can cause crash without this line. Must Must.
- // Timeout: time.Second * 20, //Otherwirse, it can cause crash without this line. Must Must.
- } // Normal is 10 but extend 20 on 1 Dec 2018
- // fmt.Println(reflect.TypeOf(respo))
- resp, err := client.Do(req)
- if err != nil {
- return nil, []byte("909"), MyErr("WERZDSVXBDCZSRE-client.Do "+apiurl, err, false)
- }
- defer resp.Body.Close()
- byteRtn, _ := ioutil.ReadAll(resp.Body)
- return byteRtn, []byte(strconv.Itoa(resp.StatusCode)), nil
- }
- func UploadFileResponse(method string, apiurl string, jsBytes []byte) ([]byte, []byte, error) {
- paramFile := "file"
- uploader := struct {
- FilePath string `json:"FilePath"`
- }{}
- var params map[string]interface{}
- if err := json.Unmarshal(jsBytes, &uploader); err == nil {
- params, _ = StructToMap(uploader, "json")
- }
- reqBd := &bytes.Buffer{}
- writer := multipart.NewWriter(reqBd)
- // 추가할 폼필드는 writer.WriteField("key", "Value") 이렇게 작업 한다.
- path := fmt.Sprint(params["FilePath"])
- file, err := os.Open(path)
- if err != nil {
- return nil, []byte("804"), errors.New("OLKMBVF-os.Open file, " + path + " " + err.Error())
- }
- defer file.Close()
- part, err := writer.CreateFormFile(paramFile, filepath.Base(path))
- if err != nil {
- return nil, []byte("804"), errors.New("WER%^TGCDS-CreateFormFile, " + path + err.Error())
- }
- _, err = io.Copy(part, file)
- if err = writer.Close(); err != nil {
- return nil, []byte("804"), errors.New("YUHGTYGHK-writer.Close" + err.Error())
- }
- req, err := http.NewRequest(method, apiurl, reqBd)
- // reader := bytes.NewBuffer(jsBytes)
- // req, err := http.NewRequest(method, apiurl, reader)
- if err != nil {
- return nil, []byte("804"), MyErr("WERZDSVADFZ-http.NewRequest", err, false)
- }
- req.Header.Add("Content-Type", "application/json")
- req.Header.Add("Accept", "application/json")
- req.Header.Add("Endpoint-Agent", "abango-rest-api-v1.0")
- req.Header.Add("Accept-Language", "en-US")
- req.Header.Add("User-Agent", runtime.GOOS+"-"+runtime.Version()) // for checking OS Type in Server
- // 들어가지 않으면 Request Reject 됨. //Go 에서는 SERVER_NAME 을 구할 방법이 없다. 아직까지는
- req.Header.Add("FrontendHost", "localhost:normal")
- req.Header.Add("RemoteIp", "localhost")
- req.Header.Add("Referer", "http://localhost")
- i := len(os.Args)
- if i != 1 { // 1일 경우는 go function call 의 경우 이므로 memory fault 가 난다.
- gateToken := os.Args[i-2]
- if len(gateToken) == 20 { // Argument 뒤에서 2번째 Arg가 20자리이면 GateToken 이라고 간주
- req.Header.Add("GateToken", gateToken)
- }
- }
- // fmt.Println(writer.FormDataContentType())
- req.Header.Set("Content-Type", writer.FormDataContentType())
- // req.Body = ioutil.NopCloser(bytes.NewReader(jsBytes))
- // Client객체에서 Request 실행
- client := &http.Client{
- Timeout: time.Second * 3600, //Otherwirse, it can cause crash without this line. Must Must.
- // Timeout: time.Second * 20, //Otherwirse, it can cause crash without this line. Must Must.
- } // Normal is 10 but extend 20 on 1 Dec 2018
- // fmt.Println(reflect.TypeOf(respo))
- resp, err := client.Do(req)
- if err != nil {
- return nil, []byte("804"), MyErr("ERTYUIJBVFBHK-client.Do "+apiurl, err, false)
- }
- defer resp.Body.Close()
- byteRtn, _ := ioutil.ReadAll(resp.Body)
- return byteRtn, []byte(strconv.Itoa(resp.StatusCode)), nil
- }
- func GetHttpResponseOLd(method string, apiurl string, jsBytes []byte) ([]byte, []byte, error) {
- // func GetHttpResponseOld(method string, apiurl string, jsBytes []byte) ([]byte, []byte, error) {
- form := url.Values{}
- // form.Add("postvalues", string(kkk))
- // Values.Encode() encodes the values into "URL encoded" form sorted by key.
- // eForm := v.Encode()
- // fmt.Printf("v.Encode(): %v\n", s)
- reader := strings.NewReader(form.Encode()) // This causes 411 error
- // req, err := http.NewRequest("GET", apiurl, reader)
- req, err := http.NewRequest(method, apiurl, reader)
- if err != nil {
- return nil, []byte("909"), MyErr("WERZDSVADFZ-http.NewRequest", err, true)
- }
- req.Header.Add("Content-Type", "application/json")
- req.Header.Add("Accept", "application/json")
- req.Header.Add("Endpoint-Agent", "abango-rest-api-v1.0")
- req.Header.Add("Accept-Language", "en-US")
- req.Header.Add("User-Agent", runtime.GOOS+"-"+runtime.Version()) // for checking OS Type in Server
- req.Body = ioutil.NopCloser(bytes.NewReader(jsBytes))
- // Client객체에서 Request 실행
- client := &http.Client{
- Timeout: time.Second * 3600, //Otherwirse, it can cause crash without this line. Must Must.
- // Timeout: time.Second * 20, //Otherwirse, it can cause crash without this line. Must Must.
- } // Normal is 10 but extend 20 on 1 Dec 2018
- // fmt.Println(reflect.TypeOf(respo))
- resp, err := client.Do(req)
- if err != nil {
- return nil, []byte("909"), MyErr("REWTAVDEQWFAF-client.Do "+apiurl, err, true)
- }
- defer resp.Body.Close()
- byteRtn, _ := ioutil.ReadAll(resp.Body)
- return byteRtn, []byte(strconv.Itoa(resp.StatusCode)), nil
- }
|