Zum Inhalt springen

Schnellstart

Website-Screenshots in PHP

Erstellen Sie mit cURL einen Screenshot über eine einzige HTTPS-Anfrage, ohne eine Browser-Infrastruktur betreiben zu müssen.

Ironfang Render bietet eine gewöhnliche HTTPS-API, daher kann PHP sie mit cURL aufrufen, ganz ohne SDK. Eine erfolgreiche Anfrage liefert die Bildbytes direkt zurück, bereit zum Schreiben in eine Datei.

Einen Schlüssel erstellen

Erstellen Sie im Portal einen API-Schlüssel. Das Geheimnis wird einmal angezeigt und als Hash gespeichert. Legen Sie es in einer Umgebungsvariablen namens IRONFANG_API_KEY ab statt in der Quelldatei; das Beispiel unten liest es von dort.

export IRONFANG_API_KEY="if_live_..."

Einen Screenshot erstellen

<?php
$key = getenv('IRONFANG_API_KEY');
if ($key === false || $key === '') {
    fwrite(STDERR, "Set IRONFANG_API_KEY to your Ironfang API key.\n");
    exit(1);
}

$ch = curl_init('https://api.ironfang.uk/render/v1/screenshot');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 60,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . $key,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'url' => 'https://example.com',
        'width' => 1280,
    ]),
]);

$body = curl_exec($ch);
if ($body === false) {
    throw new RuntimeException('Request failed: ' . curl_error($ch));
}
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($status !== 200) {
    $err = json_decode($body, true)['error'] ?? ['code' => 'unknown', 'message' => $body];
    throw new RuntimeException("{$status} {$err['code']}: {$err['message']}");
}

file_put_contents('shot.png', $body);

Führen Sie es aus, und der Screenshot wird als shot.png im aktuellen Verzeichnis gespeichert:

php shot.php

Fehlerbehandlung

Erfolgreiche Render-Antworten sind binär. Fehler kommen als JSON in der Form {"error": {"code", "message"}}. Ein fehlender oder unbekannter Schlüssel ergibt 401 invalid_api_key. Ein Schlüssel ohne die Berechtigung render:render ergibt 403 insufficient_scope.

// CURLOPT_RETURNTRANSFER keeps the binary response in $body
// instead of writing it directly to stdout. curl_exec returns
// false only when the request never completed.

PDFs und Vorlagen

Derselbe Aufruf funktioniert für PDFs unter /render/v1/pdf und für Bilder aus Vorlagen unter /render/v1/image/{id}. Nur der Pfad und der Body ändern sich.

Weiterlesen