Go'nun standart kütüphanesi net/http ile sertifika API'sine istemci yazmak için yeterlidir. Zaman aşımlı bir http.Client ve küçük bir yardımcı fonksiyon çoğu ihtiyacı karşılar.
Örnek istemci
package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"os"
"time"
)
type Siparis struct {
ID string `json:"id"`
Domain string `json:"domain"`
Durum string `json:"status"`
}
var client = &http.Client{Timeout: 30 * time.Second}
func siparisler() ([]Siparis, error) {
req, err := http.NewRequest("GET", "https://api.ornek-ca.example/v1/orders", nil)
if err != nil {
return nil, err
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("SSL_API_TOKEN"))
resp, err := client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
if resp.StatusCode >= 400 {
b, _ := io.ReadAll(io.LimitReader(resp.Body, 1024))
return nil, fmt.Errorf("api hatasi %d: %s", resp.StatusCode, b)
}
var out struct{ Data []Siparis `json:"data"` }
if err := json.NewDecoder(resp.Body).Decode(&out); err != nil {
return nil, err
}
return out.Data, nil
}
Adres ve alanlar kurgusaldır; sağlayıcının yanıt şemasına göre uyarlayın.
Go'ya özgü ipuçları
http.DefaultClientzaman aşımsızdır; her zaman kendi istemcinizi tanımlayın.resp.Body'yi kapatmayı unutmayın, aksi halde bağlantılar sızar.tls.Config{InsecureSkipVerify: true}kullanmayın; özel bir iç CA içinRootCAshavuzuna ekleme yapın.- İstekleri
context.Contextile iptal edilebilir yapın.
Sertifika bitiş kontrolü
Go ile tls.Dial yapıp ConnectionState().PeerCertificates[0].NotAfter değerini okuyarak kendi izleme aracınızı kolayca yazabilirsiniz; tek ikili dosya olarak sunuculara dağıtmak pratiktir.
Elle doğrulama için SSL denetleyici, sertifika seçimi için SSL seçim rehberi yardımcı olur.
Yapılandırma ve dağıtım
Go ikilisini statik derleyip sunucuya kopyalamak, bağımlılık sorunlarını ortadan kaldırır. Zamanlanmış görev olarak çalıştırırken çıkış kodunu anlamlı tutun; hata durumunda sıfırdan farklı değer döndürün ki izleme sistemi sorunu yakalasın.