4/5 (1 avis)
Snippet vu 13 329 fois - Téléchargée 33 fois
<? ///////////////////////////////////////////////////////////////////////////////////////////////////// // crée le 07/08/05 par Pierre ELINE (pierre95400@hotmail.com) // // ------------------------------------------------------------------------------------------------ // // Relais de Requête HTTP 1.1 dévellopé pour le CGI de GCIS, il est prévu pour les méthodes GET et // // POST. // // Pour le configurer, il faut renseigner les variables de la partie CONFIGURATION (ci-dessous) // // ------------------------------------------------------------------------------------------------ // // Requis : - Le module php_sockets doit être active // // - Dans php.ini : always_populate_raw_post_data = On // ///////////////////////////////////////////////////////////////////////////////////////////////////// /* CONFIGURATION : */ ///////////////////////////// $service_port = 80; // numéro de port du serveur GCIS (par défaut 80) $serveur_distant = "beai59"; // adresse du serveur GCIS (exemple : beai59), une IP convient $chemin_script = "/scripts/gcis.exe"; // chemin d'accès au script (exemple: /scripts/gcis.exe) $serveur_relais = "b563071.inetpsa.com"; // adresse du serveur relais sur lequel est hebergée cette page (côté réseau serveur_distant), une IP convient $option_log = false; // true : log active, false : log désactive /* FONCTIONS : */ ///////////////////////////// function dechunk ($var) { $sortie='';$long_dec=0; $i=0; do { $sortie .= substr ($var,$i,$long_dec); $long_hexa=''; do { $long_hexa .= $var[$i]; $i++; } while ($var[$i] != CHR(13) || $var[$i+1] != CHR(10)); $i=$i+2; $long_dec = hexdec ($long_hexa); } while ($long_dec != 0); return $sortie; } function envois_reponse ($reponse) { $tab_reponse = explode (CHR(13).CHR(10).CHR(13).CHR(10),$reponse,2); $tab_reponse[0] .= CHR(13).CHR(10).CHR(13).CHR(10); header ($tab_reponse[0]); $pos = strpos ($tab_reponse[0],"HTTP/1.1 200 OK"); if ( $pos > 0 or $pos === false) // est-ce le header de la reponse? { envois_reponse ($tab_reponse[1]); // si non, alors on redecoupe le reste de la reponse en (Header + Reste) } else // Si oui alors on envoit le coprs de la réponse { if (strpos ($tab_reponse[0],"Transfer-Encoding: chunked") !== false) // donnees chunked { echo dechunk ($tab_reponse[1]); // dechunk avant envois } else echo $tab_reponse[1]; // envois sans modifcation } } /* SCRIPT : */ ///////////////////////////// // constitution de la requete http $message = $_SERVER['REQUEST_METHOD']; // methode $message .= " ".$chemin_script; if ($_SERVER['QUERY_STRING']!="") { $message .= "?".$_SERVER['QUERY_STRING']; } $message .= " HTTP/1.1\r\n"; // fin methode $message .= "Host: ".$serveur_relais."\r\n"; // HOST $entetes = getallheaders (); // autres champs foreach ($entetes as $key=>$val) { if ($key == "Transfer-Encoding" && $val == "chunked"); // on envoit pas de chunk mais en un seul bloc elseif ($key != "Host") $message .= $key.": ".$val." \r\n"; } // fin autres champs $message .= "\r\n"; // fin entete if ($_SERVER['REQUEST_METHOD']=="POST") // ajout du POST $message .= $HTTP_RAW_POST_DATA."\r\n"; // Lit l'adresse IP du serveur de destination $address = gethostbyname($serveur_distant); // Cree une socket TCP/IP $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); $result = socket_connect($socket, $address, $service_port); // envois de la requete socket_write($socket, $message, strlen($message)); // lecture de la reponse $tmp = ''; $reponse = ''; while ($tmp = socket_read($socket, 2048)) { $reponse .= $tmp; } // Partie Log if ($option_log == true) { $fp = fopen ("log.txt","a+"); fputs ($fp,$message."\r\n<----------REPONSE---------->\r\n".$reponse."\r\n==============FIN==============\r\n"); fclose ($fp); } // fin socket socket_close ($socket); // separation des headers du corps de la reponse puis envois envois_reponse ($reponse); // fin du script exit(); ?>
27 sept. 2005 à 22:38
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.