/** * Tarifcheck24 PHP Includes Version 1.2 * * Änderungen Version 1.1: * * - Neuer Parameter beim Erstellen der Klasse: * $mode ermöglicht auch das Laden vom Kurzvergleich, * welcher für manche Produkte verfügbar ist. Bezüglich * der Verfügbarkeit im Werbemittelbereich informieren * * Änderungen Version 1.2: * * - Neuer Paraemter für UTF8-Seiten: * Oft müssen die Includes in Seiten mit dem Zeichensatz * UTF-8 eingebettet werden, z.B. bei Seiten mit mehreren Sprachen * oder aktuellen Content Management Systemen. Setzt man den Parameter * true werden automatisch eingehende und ausgehende Daten konvertiert * und korrekt in UTF-8 Seiten eingebettet. Bleibt der Parameter auf * false (Standardwert) dann wird weiterhin vom ISO Zeichensatz * ausgegangen. * * Dieses Skript greift während der Laufzeit direkt auf * den Tarifcheck24 Server zu, und übermittelt als eine Art * Proxy die Informationen zurück. * * Weitere Informationen: siehe Beispieldatei. * */ class t24form { var $insurance_id = 1; var $partner_id = 360; var $ad_id = 338; var $tracking = ''; var $referer_url = ''; var $css_url = ''; var $mode = ''; var $uf8 = false; var $hostname = 'form.partner-versicherung.de'; var $url = 'http://form.partner-versicherung.de/show2.php'; var $base_url = 'http://form.partner-versicherung.de'; var $system_url = NULL; var $session = NULL; var $body = ''; var $head = ''; /** * Starten der Tarifcheck24 Includes * * @param int $insurance_id Produkt-ID (siehe Dokumentation) * @param int $partner_id Ihre Partner-ID * @param string $tracking optional: Manuelle Tracking-ID * @param string $referer_url optional: Referer des Kunden (wird in Statistiken übertragen) * @param string $css_url optional: CSS URL für die Integration in den Vergleich * @param string $mode optional: Für ausgewählte Produkte gibt es Kurzvergleiche (aktuell: PKV, BU, RIESTER) * @param boolean $utf8 optional: Wenn auf True gesetzt wird davon ausgegangen, dass die umgebende Seite und alle Parameter UTF8 sind, ansonsten wird von ISO-8859-1 ausgegangen * @return t24form */ function t24form($insurance_id, $partner_id, $tracking = '', $referer_url = '', $css_url = '', $mode = '', $utf8 = false) { $this->insurance_id = !empty($insurance_id) ? (int)$insurance_id : 1; $this->partner_id = !empty($partner_id) ? (int)$partner_id : 360; $this->tracking = $tracking; $this->ad_id = 15; // Interner Parameter $this->referer_url = $referer_url; $this->css_url = $css_url; $this->uf8 = is_bool($utf8) ? $utf8 : false; if ($mode == 'short') { $this->mode = $mode; $this->ad_id = 343; } } function transform_input($text) { return $this->uf8 == true ? utf8_decode($text) : $text; } function transform_output($text) { return $this->uf8 == true ? utf8_encode($text) : $text; } function get_start_url() { $insurance_id = (int)$this->insurance_id; $partner_id = (int)$this->partner_id; $ad_id = (int)$this->ad_id; $tracking = urlencode($this->transform_input($this->tracking)); $referer_url = urlencode($this->transform_input($this->referer_url)); $css_url = urlencode($this->transform_input($this->css_url)); $mode = urlencode($this->transform_input($this->mode)); $fp = fsockopen($this->hostname, 80, $errno, $errstr, 5); if (!$fp) { return NULL; } else { $out = "GET /show.php?insurance_id=$insurance_id&partner_id=$partner_id&ad_id=$ad_id&tracking=$tracking&referer_url=$referer_url&css_url=$css_url&mode=$mode HTTP/1.0\r\n"; $out .= 'Host: ' . $this->hostname . "\r\n"; $out .= "Connection: Close\r\n\r\n"; fwrite($fp, $out); $result = ''; while (!feof($fp)) { $result .= fgets($fp, 128); } fclose($fp); $tmp = preg_split("/^(.*?)\r?\n\r?\n(.*)$/", $result); if (!empty($tmp[0]) && preg_match('/Location: ([^\n]*)/si', $tmp[0], $matches) == 1) { preg_match('/([a-z0-9]{32})/is', $result, $matches2); $this->set_session($matches2[1]); return trim($matches[1]); } else { return NULL; } return $this->transform_output($result); } } function set_body($body) { $this->body = $body; } function get_body() { return $this->body; } function set_session($session) { $this->session = $session; } function get_session() { return $this->session; } function set_head($head) { $this->head = $head; } function get_head() { return $this->head; } function request($mode, $url, $parameter) { $data = ''; if ($mode == 'POST') { $fp = fsockopen($this->hostname, 80, $errno, $errstr, 5); if (!$fp) { return NULL; } else { $parameter['registered_ip'] = $_SERVER['REMOTE_ADDR']; $out = 'POST ' . $url . " HTTP/1.0\r\n"; $out .= 'Host: ' . $this->hostname . "\r\n"; $out .= "Content-type: application/x-www-form-urlencoded\r\n"; $param = ''; while (list($name, $value) = @each($parameter)) { $param[] = $name . '=' . urlencode($this->transform_input($value)); } $param = implode('&', $param); $out .= 'Content-length: ' . strlen($param) . "\r\n"; $out .= "Connection: close\r\n\r\n"; $out .= $param; fwrite($fp, $out); while (!feof($fp)) { $data .= fgets($fp, 128); } fclose($fp); // Follow Location-Header (we only expect internal Headers here) $tmp = preg_split("/^(.*?)\r?\n\r?\n(.*)$/", $data); if (!empty($tmp[0]) && preg_match('/Location: ([^\n]*)/is', $tmp[0], $matches) == 1) { if ($matches[1]{0} == '/') { $data = file_get_contents('http://' . $this->hostname . '/' . $this->get_session() . trim($matches[1])); } else { $data = file_get_contents('http://' . $this->hostname . '/' . $this->get_session() . '/' . trim($matches[1])); } } } } else { $parts = parse_url($url); if (isset($parts['host']) && $parts['host'] == $this->hostname) { $data = file_get_contents($url); } else { $data = 'access violation'; } } $data = $this->transform_output($data); // Replace $data = strtr($data, array( 'method="post"' => 'method="get"', 'href="javascript:' => 'href="javascript:', 'src="http://www.' => 'src="http://www.', 'href="http://' => 'href="http://', 'href="' => 'href="' . $this->base_url, 'src="' => 'src="' . $this->base_url, ' 'system_url . '#t24form"', $data); // Get body if (preg_match('/body[^>]*\>(.*)\<\/body/is', $data, $matches) == 1) { $this->set_body($matches[1]); } // Get head if (preg_match('/head\>(.*)\<\/head/is', $data, $matches) == 1) { $matches[1] = preg_replace('/(\