Имеется js код такого типа, который делает запрос к апи и получает от него ответ.
var request = require('request');
var requestOptions = {
login: {
url: `${serverUrl}/auth/login`,
method: 'POST',
body: {
emailid: "aaaa@aaa.aaa",
password: "1234",
entityType: "user"
}
},
};
//send request to server
function sendRequest({ type, token }) {
if (requestOptions[type]) {
requestOptions[type].rejectUnauthorized = false;
requestOptions[type].json = true;
if (type === 'login') {
requestOptions[type].headers = {
'Accept': 'application/json',
}
}
return new Promise((resolve, reject) => {
request(requestOptions[type], (error, response, body) => {
if (error) {
console.log({
error: "Ok",
errMessage: error
});
} else {
console.log({ sucess: "Ok", body: response.body });
}
});
});
} else {
console.log('Invalid request');
}
}
sendRequest({ type: 'login' });
Пытался его реализовать на golang таким образом
type Payload struct {
Emailid string `json:"emailid"`
Password string `json:"password"`
EntityType string `json:"entityType"`
}
func Init(apiKey string, apiSecret string) error {
data := new(Payload)
data.Emailid = apiKey
data.Password = apiSecret
data.EntityType = "user"
fmt.Println(data)
payloadBytes, err := json.Marshal(data)
if err != nil {
return fmt.Errorf("Error in Init with payloadBytes, err := json.Marshal(data) %s", err.Error())
}
body := bytes.NewReader(payloadBytes)
req, err := http.NewRequest("POST", "https://url/auth/login", body)
if err != nil {
return fmt.Errorf("Error in Init NewRequest %s", err.Error())
}
req.Header.Set("Accept", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
return fmt.Errorf("Error in Init with resp, err := http.DefaultClient.Do(req) %s", err.Error())
}
defer resp.Body.Close()
htmlData, err := ioutil.ReadAll(resp.Body)
if err != nil {
return fmt.Errorf("Error in Init with htmlData, err := ioutil.ReadAll(resp.Body) %s", err.Error())
}
fmt.Println(string(htmlData))
return nil
}
Но почему-то запрос к апи возвращает пустой ответ, если запускать код на golang.
Помогите найти ошибку. Заранее буду благодарен.
Если вы запускаете golang код в docker, возможно поможет вот этот хак в Dockerfile
если он не multistage добавить такое
RUN apk update && apk add --no-cache git ca-certificates && update-ca-certificates
Если же у вас multistage то там где используется scratch добавить еще такое
COPY --from=go-builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
Вот тут чуть подробней есть инфа.
У вашего сервера плохой сертификат. Вашим первым инстинктом должно быть починить ситуацию с сертификатом на стороне сервера!
Только когда вы абсолютно уверены, что это невозможно, и только когда вы готовы нести за это полную ответственность, вы можете отключить проверку верности сертификата у HTTP-клиента:
// TODO(philipp): UNSAFE! FIX THIS! DON'T USE IN PRODUCTION!
//
// Largely copied from
// https://golang.org/pkg/net/http/#DefaultTransport.
var client = &http.Client{
Transport: &http.Transport{
Proxy: http.ProxyFromEnvironment,
DialContext: (&net.Dialer{
Timeout: 30 * time.Second,
KeepAlive: 30 * time.Second,
DualStack: true,
}).DialContext,
ForceAttemptHTTP2: true,
MaxIdleConns: 100,
IdleConnTimeout: 90 * time.Second,
TLSHandshakeTimeout: 10 * time.Second,
ExpectContinueTimeout: 1 * time.Second,
TLSClientConfig: &tls.Config{
// See comment above.
// UNSAFE!
// DON'T USE IN PRODUCTION!
InsecureSkipVerify: true,
},
},
}
Вся ответственность за подобный код лежит на вас!
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Браузер автоматически добавляет в колонтитул содержимое тега h1 и добавляет датуМожно как-то изменить его?