Curt: Cookie empfangen und zurücksenden

Hallo,

Plage mich seit längerem mit folgendem Problem rum, und irgendwie sehe ich kein Land.
Ich öffne mit
$fp = fsockopen("xyz.com",80,&$errno, &$errstr, 30);
eine Verbindung und fordere dann über diese eine URL an
fputs ($fp, "GET /index.html HTTP/1.0\r\n\r\n");
die Ausgabe erfolgt über
while (!feof($fp)) {
    $inhalt .= fgets($fp,128);
  }
fclose($fp);
print $inhalt;

Diese URL setzt dabei ein Cookie, welches ich bei Anforderung einer weiteren URL dieser Domaine wieder zurücksenden will. Hab schon meine Problem an dieses Cookie zu kommen, bitte nicht lachen, habs folgendermassen probiert (was auch geht),

$parts = split("Set-Cookie:",$inhalt);
$cookie = split("xyz.com",$parts[1]);
$receivedCookie = $cookie[0]."xyz.com";

das funktioniert so auch, muss doch aber ne bessere Lösung geben.
Was nicht geht ist das zurücksenden des Cookies, ich habs probiert mit
Header("Cookie : $receveidCookie");
fputs ($fp, "GET /next.html HTTP/1.0\r\n\r\n");

klappt aber nicht.

Irgendwie fehlt mir da etwas Verständnis, komme nicht weiter. Vielleicht kann mir jemand auf die Sprunge helfen, oder kennt ne gute Doku wo dieses Problem (mehr woll die Lösung *g*)beschrieben ist.

gruss

Curt

  1. Ich öffne mit
    $fp = fsockopen("xyz.com",80,&$errno, &$errstr, 30);
    eine Verbindung und fordere dann über diese eine URL an

    Diese URL setzt dabei ein Cookie, welches ich bei Anforderung einer weiteren URL dieser Domaine wieder zurücksenden will.

    Was nicht geht ist das zurücksenden des Cookies, ich habs probiert mit
    Header("Cookie : $receveidCookie");
    fputs ($fp, "GET /next.html HTTP/1.0\r\n\r\n");

    klappt aber nicht.

    Vermutung 1: Wenn, dann 'header("Cookie: $receivedCookie");' (das Leerzeichen vor dem Doppelpunkt hat da nix zu suchen). RFC 2109.

    Vermutung 2: Du willst den Keks an /next.html senden. Mit header() schickst du das Teil aber an die Seite, die das PHP-Skript ausgibt.
    Es müsste also 'fputs ($fp, "GET /next.html HTTP/1.0\r\nCookie: $receivedCookie\r\n\r\n");' heißen.

    Vermutung 3: Du hast vergessen, die Verbindung wiederherzustellen. HTTP/1.0-Verbindungen werden nach der ersten Anfrage geschlossen, sofern nicht explizit der Weiterbestand angekündigt wurde. RFC 2616, RFC 2068.

    Vorschlag zu deinem Cookie-Einlesen-Problem: Warum schaust du nicht einfach bei allen bis zur ersten Leerzeile eingelesenen Zeilen, ob sie mit "Set-Cookie:" anfangen und kopierst dann den Inhalt nach den Leerzeichen nach $receivedCookie? Also in etwa:

    while (!feof($fp) && ($zeile!="\r\n") { // nur Kopfzeilen
        $zeile=fgets($fp);
        if (substr($zeile,0,12)=="Set-Cookie: ")
           $receivedCookie=trim(substr($zeile,12));
      }
    while (!feof($fp) {
      //Inhalt verwursten..

    Deine Version hat übrigens das Problem, daß sie auch auf "Set-Cookie:" im Seiteninhalt reagiert, anstatt nur die Kopfzeilen zu bearbeiten.

    Hoffentlich hilft's:)
    soenk.e

    1. Hi soenk.e,

      Erstmal vielen Dank, dachte schon der Thread landet unbeantwortet in Nirvana. Jetzt sind mir so ein paar Lichter aufgegangen, klar ist http ein Verbindungsloses Protokoll *schäm*.

      So werd das ganze mal ausprobieren, denke aber jetzt komme ich klar.

      Deine Version hat übrigens das Problem, daß sie auch auf "Set-Cookie:" im Seiteninhalt reagiert, anstatt nur die Kopfzeilen zu bearbeiten.

      Das hatte ich noch in Kauf genommen, da ich die http-Kommunikation mitferfolgen wollte (ist schon wenn man mal ein Blick hinter die Kulissen werfen kann *g*)

      Hoffentlich hilft's:)
      soenk.e

      Auf jeden Fall

      gruss

      Curt

      1. Hi soenk.e,

        Jetzt sind mir so ein paar Lichter aufgegangen, klar ist http ein Verbindungsloses Protokoll *schäm*.

        Naja, du kannst natürlich mit "GET .. HTTP/1.1" oder "Connection: Keep-Alive" verlangen, das die Verbindung recycled wird. Aber dann hast du wahrscheinlich die unangenehme Aufgabe, die Antworten vom Server auseinanderzudröseln..

        Das hatte ich noch in Kauf genommen, da ich die http-Kommunikation mitferfolgen wollte (ist schon wenn man mal ein Blick hinter die Kulissen werfen kann *g*)

        Für sowas ist auch telnet ganz nett :)
          soenk.e