Claude (Anthropic) aus PHP aufrufen – die Messages-API mit cURL
Ein KI-Feature in deine PHP-Website einbauen, ohne SDK: Die Anthropic Messages-API ist ein einziger HTTP-Endpunkt. Hier der komplette, sichere Aufruf per cURL – mit Key aus der Umgebung, nicht im Code.
Du willst ein KI-Feature in deine PHP-Seite bauen – eine Zusammenfassung, eine Klassifizierung, einen Chat-Assistenten? Bei Claude von Anthropic geht alles über einen einzigen Endpunkt: POST /v1/messages. Du brauchst kein SDK, curl reicht. Wichtig ist nur, den API-Key serverseitig zu halten (nie im Frontend!) und ihn aus der Umgebung zu lesen.
Der komplette Aufruf
<?php
declare(strict_types=1);
function claude_ask(string $prompt): string
{
$apiKey = getenv('ANTHROPIC_API_KEY'); // Key aus der Umgebung, NICHT im Code
if ($apiKey === false || $apiKey === '') {
throw new RuntimeException('ANTHROPIC_API_KEY fehlt');
}
$payload = [
'model' => 'claude-sonnet-5', // gutes Preis-/Leistungs-Verhältnis
'max_tokens' => 1024, // Obergrenze der Antwortlänge
'messages' => [
['role' => 'user', 'content' => $prompt],
],
];
$ch = curl_init('https://api.anthropic.com/v1/messages');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'x-api-key: ' . $apiKey,
'anthropic-version: 2023-06-01', // Pflicht-Header
'content-type: application/json',
],
CURLOPT_POSTFIELDS => json_encode($payload, JSON_THROW_ON_ERROR),
CURLOPT_TIMEOUT => 60,
]);
$res = curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($res === false || $code >= 400) {
throw new RuntimeException("Claude-API-Fehler (HTTP $code): $res");
}
$data = json_decode($res, true, 512, JSON_THROW_ON_ERROR);
// content ist ein Array aus Blöcken – der Text steckt im ersten "text"-Block
foreach ($data['content'] as $block) {
if (($block['type'] ?? '') === 'text') {
return $block['text'];
}
}
return '';
}
echo claude_ask('Fasse in einem Satz zusammen, was ein CMS ist.');Worauf es ankommt
anthropic-version: 2023-06-01ist ein Pflicht-Header – ohne ihn antwortet die API mit 400.max_tokensist erforderlich und begrenzt die Antwortlänge. Für lange Antworten höher setzen (und dann besser streamen).- Die Antwort ist ein Array von Blöcken, nicht ein einzelner String. Greif nie blind auf
content[0]['text']zu – iteriere und prüfe dentype, sonst kracht es, sobald ein anderer Block zuerst kommt. - Modellwahl:
claude-sonnet-5ist ein guter Standard fürs Web (schnell, günstig, stark). Für die anspruchsvollsten Aufgaben gibt es die Opus-Reihe.
Merksatz zur Sicherheit: Der API-Key gehört ausschließlich auf den Server. Ein Key im JavaScript deiner Seite ist sofort öffentlich – über die Netzwerk-Konsole des Browsers auslesbar. Frontend-Aufrufe gehen daher immer über deinen eigenen PHP-Endpunkt, der den Key hält.
Du willst ein KI-Feature sauber in deine Website integrieren? Sprich mich an.
Quellen
Du brauchst mehr als ein Snippet?
Ich entwickle Android-Apps in Kotlin und moderne Websites für Selbstständige und kleine Unternehmen — von der ersten Idee bis zum Release.
Projekt anfragen →Verwandte Snippets
Passwörter sicher speichern mit password_hash()
Niemals Passwörter im Klartext oder mit MD5 speichern. Mit password_hash() und password_verify() macht PHP das Richtige von selbst – inklusive Salt und späterem Rehash.
PDO mit SQLite – sichere Abfragen per Prepared Statement
SQLite ist eine ganze Datenbank in einer Datei – perfekt für kleine Projekte. Mit PDO und Prepared Statements fragst du sie sicher ab, ganz ohne SQL-Injection.
429 bei KI-APIs richtig behandeln – Retry mit Exponential Backoff (Bash)
Jede KI-API (Claude, OpenAI, Gemini) drosselt mit HTTP 429, wenn du zu schnell anfragst. Wer sofort stur weiterhämmert, wird noch länger blockiert. So respektierst du den Retry-After-Header und wartest exponentiell.