60 lines
1.3 KiB
Go
60 lines
1.3 KiB
Go
package soap
|
|
|
|
import (
|
|
"bytes"
|
|
"daemonService/internal/models"
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
// func (s *ListaLeyendasFacturaService) enviarSOAPRequest(soapReq string) (*http.Response, []byte, error) {
|
|
func EnviarSOAPRequest(s *models.ServiceModel, soapReq string) (*http.Response, []byte, error) {
|
|
var resp *http.Response
|
|
var bodyBytes []byte
|
|
var err error
|
|
|
|
backoff := time.Second
|
|
for i := 0; i < s.SOAPRetries; i++ {
|
|
if i > 0 {
|
|
time.Sleep(backoff)
|
|
backoff *= 2
|
|
}
|
|
|
|
req, err := http.NewRequest("POST", s.SOAPEndpoint, bytes.NewBufferString(soapReq))
|
|
if err != nil {
|
|
continue
|
|
}
|
|
|
|
req.Header.Set("Content-Type", "text/xml; charset=utf-8")
|
|
//req.Header.Set("apikey", s.APIKey)
|
|
req.Header.Set(s.KeyToken, s.ValueToken)
|
|
|
|
// Crea un transporte que ignore la configuración de proxy
|
|
transport := &http.Transport{
|
|
Proxy: nil, // Esto desactiva el uso de proxy
|
|
}
|
|
|
|
client := &http.Client{
|
|
Transport: transport,
|
|
Timeout: 30 * time.Second,
|
|
}
|
|
|
|
resp, err = client.Do(req)
|
|
if err != nil || resp.StatusCode != http.StatusOK {
|
|
continue
|
|
}
|
|
|
|
bodyBytes, err = io.ReadAll(resp.Body)
|
|
if err != nil {
|
|
resp.Body.Close()
|
|
continue
|
|
}
|
|
|
|
return resp, bodyBytes, nil
|
|
}
|
|
|
|
return nil, nil, fmt.Errorf("fallo después de %d reintentos: %v", s.SOAPRetries, err)
|
|
}
|