Ironfang Render utilise une API HTTPS standard : Go peut donc l'appeler avec net/http, sans SDK. Une requête réussie renvoie directement les octets de l'image, prêts à être écrits dans un fichier.
Obtenir une clé
Créez une clé API dans le portail. Le secret ne s'affiche qu'une fois et il est stocké sous forme de hachage. Conservez-le dans une variable d'environnement nommée IRONFANG_API_KEY plutôt que dans le fichier source ; l'exemple ci-dessous l'y lit.
export IRONFANG_API_KEY="if_live_..."Réaliser une capture d'écran
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"log"
"net/http"
"os"
"time"
)
func main() {
key := os.Getenv("IRONFANG_API_KEY")
if key == "" {
log.Fatal("Set IRONFANG_API_KEY to your Ironfang API key.")
}
body, err := json.Marshal(map[string]any{
"url": "https://example.com",
"width": 1280,
})
if err != nil {
log.Fatal(err)
}
req, err := http.NewRequest(http.MethodPost,
"https://api.ironfang.uk/render/v1/screenshot",
bytes.NewReader(body))
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer "+key)
req.Header.Set("Content-Type", "application/json")
client := &http.Client{Timeout: 60 * time.Second}
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
var e struct {
Error struct{ Code, Message string } `json:"error"`
}
if err := json.NewDecoder(resp.Body).Decode(&e); err != nil {
log.Fatalf("%d: unreadable error body: %v", resp.StatusCode, err)
}
log.Fatalf("%d %s: %s", resp.StatusCode, e.Error.Code, e.Error.Message)
}
out, err := os.Create("shot.png")
if err != nil {
log.Fatal(err)
}
if _, err := io.Copy(out, resp.Body); err != nil {
log.Fatal(err)
}
if err := out.Close(); err != nil {
log.Fatal(err)
}
fmt.Println("saved shot.png")
}Exécutez-le, et la capture d'écran est enregistrée sous le nom shot.png dans le répertoire courant :
go run main.goGérer les erreurs
Les réponses de rendu réussies sont binaires. Les erreurs sont en JSON, de la forme {"error": {"code", "message"}}. Une clé absente ou non reconnue renvoie 401 invalid_api_key. Une clé sans la portée render:render renvoie 403 insufficient_scope.
// io.Copy streams the response to disk without buffering the
// complete image in memory. Close is checked because a failed
// close can mean the file was not fully written.PDF et modèles
La même forme d'appel fonctionne pour les PDF sur /render/v1/pdf, et pour les images issues de modèles sur /render/v1/image/{id}. Seuls le chemin et le corps changent.
Pour aller plus loin
- API de capture d'écran : tailles de fenêtre d'affichage, formats, captures épurées et tarifs
- Captures d'écran de page entière : capturer toute la page défilante en une seule image
- Captures d'écran de sites web en Python
- Captures d'écran de sites web en Node.js
- Référence complète de l'API

