package request import ( "fmt" "io" "net/http" "strings" ) type RequestService struct { api string apiKey string } func NewRequestService(api, apiKey string) RequestService { return RequestService{ api: api, apiKey: apiKey, } } func getPayload(employeeIDList []string) (string, error) { employees := strings.Builder{} _, err := employees.Write([]byte(``)) if err != nil { return "", fmt.Errorf("error while write headers: %s", err) } for _, employeeID := range employeeIDList { employees.Write([]byte("" + employeeID + "")) } _, err = employees.Write([]byte("")) if err != nil { return "", fmt.Errorf("error while write footer: %s", err) } return employees.String(), nil } func (r RequestService) EmployeeWorkInformation(data *[]byte, employeeIDList []string, from, to string) error { url := r.api + "/EmployeeWorkInformation/Search/" + from + "/" + to + "/" stringPayload, err := getPayload(employeeIDList) if err != nil { return fmt.Errorf("getPayload: %s", err) } payload := strings.NewReader(stringPayload) client := &http.Client{} req, err := http.NewRequest("POST", url, payload) if err != nil { return fmt.Errorf("http.NewRequest: %s", err) } req.Header.Add("Cache-Control", "no-cache") req.Header.Add("Authorization", r.apiKey) req.Header.Add("Content-Type", "application/xml") res, err := client.Do(req) if err != nil { return fmt.Errorf("client.Do: %s", err) } defer res.Body.Close() for { if len(*data) == cap(*data) { // Add more capacity (let append pick how much). *data = append(*data, 0)[:len(*data)] } n, err := res.Body.Read((*data)[len(*data):cap(*data)]) *data = (*data)[:len(*data)+n] if err != nil { if err == io.EOF { err = nil } return err } } // data, err = io.ReadAll(res.Body) // if err != nil { // return fmt.Errorf("ioutil.ReadAll: %s", err) // } //log.Println("readed", string(body)) return nil }