Trackbacks mit PHP senden

Trackbacks werden über POST Requests versendet. Mit PHP ist das nicht weiter schwierig, da es die nette Funktion fsockOpen() gibt. In einem Trackback werden vier Variabeln an den anderen Server gesendet. Zuerst den Titel ($title), die URL zum eigenen Artikel ($url), den Text auch Excerpt genannt ($excerpt) und schlussendlich noch den Namen des eigenen Blogs ($blog_name).
Bevor wir nun die Verbindung zum fremden Server herstellen, formen wir zuerst mal die Variabeln richtig. Für einen POST Request muss man den Hostnamen und den Pfad zur Trackback Seite haben. Diese Adresse Teilt man am besten mit der Funktion parse_url() auf. Das Codestücklein sieht dann so aus:
<?
// adresse parsen
$trackback_url=parse_url($trackback_url);

// host und pafd variabeln
$host=$trackback_url['host'];
$url=$trackback_url['path'];

// wenn eine query (?...) gesetzt ist.
if(isSet($trackback_url['query']))
{
    
$url.="?".$trackback_url['query'];
}
?>

Nun setzten wir die Variable $text. Darin werden die zu sendenden Daten gespeichert. Die Variabeln müssen noch mit urlEncode() behandelt werden.
<?
$text 
="title=".urlEnCode($title);
$text.="&amp;url=".urlEnCode($url);
$text.="&amp;excerpt=".urlEncode($excerpt);
$text.="&amp;blog_name=".urlEncode($blog_name);
?>

Nun sind die Variabeln vorbereitet und wir können den Request senden.
<?
// verbindung zum host auf port 80 herstellen
$fp=fSockOpen($host,80);

// POST request mit HTTP/1.1
fPuts($fp,"POST ".$url." HTTP/1.1\r\n");

// Nochmals den Hostnamen angeben
fPuts($fp,"Host: ".$host."\r\n");

// Content-Type
fPuts($fp,"Content-Type: application/x-www-form-urlencoded; charset=utf-8\r\n");

// Laenge des Requests. Laesst sich mit strLen() wunderbar berechnen.
fPuts($fp,"Content-length: ".strLen($text)."\r\n");

// Verbidung danach wieder schliessen
fPuts($fp,"Connection: close\r\n\r\n");

// Daten senden
fPuts($fp,$text);

// Vrebindung trennen
fclose($fp);
?>

Das wars auch schon. Das ganze ist relativ simpel, allerdings muss man aufpassen, dass man die Variabeln richtig zurechtbiegt, damit keine Fehler auftreten. Bald folgt noch ein Beitrag über Autodiscovery, aber damit muss ich mich selber zuerst beschäftigen.

Anmerkung:
Bei den gesendeten Daten sollte nicht &amp; sondern nur & stehen. Das ist ein Problem der Software. Ich werde sehen, ob ich das noch zurechtbiegen kann.