HTTPS Request mittels fsockopen

Falls jemand irgendwann einmal etwas Ähnliches braucht, hier die etwas modifizierte PostToHost Funktion:

PHP:
function PostToHost($host,$ssl,$path,$user,$pass,$referer,$data){
  //Daten anpassen
  if(is_array($data)){
    foreach($data as $name => $var){
      $data_to_send .= $name."=".urlencode(urldecode($var))."&";
    }
    substr($data_to_send,0,-1);
  }
  else $data_to_send = $data;
  //SSL einbinden, falls gewünscht
  if($ssl){
    $host = "ssl://".$host;
    $port = 443;
  }
  else $port = 80;
  //Verbindung öffnen
  $fp = fsockopen($host,$port);
  //Header erzeugen
  fputs($fp,"POST ".$path." HTTPS/1.1\r\n");
  fputs($fp,"Host: ".$host."\r\n");
  if($user != "" && $pass != "") fputs($fp, "Authorization: Basic ".base64_encode($user.":".$pass)."\r\n");
  fputs($fp,"Referer: ".$referer."\r\n");
  fputs($fp,"Content-type: application/x-www-form-urlencoded\r\n");
  fputs($fp,"Content-length: ".strlen($data_to_send)."\r\n");
  fputs($fp,"Connection: close\r\n\r\n");
  fputs($fp,$data_to_send);
  //Antwort abfangen
  while(!feof($fp)) {
      $res .= fgets($fp, 128);
  }
  //Verbindung schliessen
  fclose($fp);
  //Antwort zurückgeben
  return $res;
}

PHP:
$antwort = PostToHost("www.domain.de",true,"/pfad/datei.html","username","passwort","referer",$daten);

Username/Passwort: Falls nicht vorhanden, einfach leer lassen.
Daten: Können sowohl in der Form eines nomalen Strings, als auch in einem Array verpackt sein.
 
Zuletzt bearbeitet:
Die vollständige URL wird in der Anfragezeile der HTTP-Nachricht eigentlich nur bei Anfragen über einen Proxy geschrieben, andernfalls reicht der URL-Pfad samt Query aus.
 
Zurück