mars073 Posted April 8, 2014 Report Posted April 8, 2014 Bonjour à tous, Je vais vous partagez un bout de code (que vous pouvez transformer en fonction) assez utile pour faire des requêtes POST (non pas avec du html) tout en PHP <3 à quoi ça sert? quand vous désirez faire un système distant un peu sécurisé ou quand quelqu'un vous ennuie et qu'il n'a pas d'anti-robot sur sa page d'inscription... /* Contexte: ayant bricolé un serveur apache et installé PHP avec beaucoup de mal vous n'arrivez pas à installer un serveur SMTP (gestion d'envoie et de réception d'email). Alors pour pallier à ce problème vous utilisez un script distant sur un ftp ayant un serveur smtp vous devez effectuer une requête POST avec des variable: l'espéditeur, le destinataire, le sujet ($sujet), le contenu ($content) et une clé de sécurité. le serveur répond "OK" si l'envoie c'est fait, on récupère la réponse dans la variable $result */ $data = array( 'exp' => "[email protected]", // expéditeur 'dest' => "[email protected]", // destinataire 'subject' => $sujet, // sujet 'content' => $content, // contenu du mail 'key' => 0258410025412002541200255210 // clé de sécurité ); $url = "http://mars073.be/smtp.phps"; // url sur la quelle il faut envoyer la requête $data_url = http_build_query($data); $data_len = strlen($data_url); $x = array ('content'=>file_get_contents ($url, false, stream_context_create (array ('http'=>array ('method'=>'POST', 'header'=>"Connection: close\r\nContent-Type: application/x-www-form-urlencoded\r\n". "Content-Length: $data_len\r\n", 'content'=>$data_url)))), 'headers'=>$http_response_header ); $result = $x['content']; if ($result == "OK") { echo "L'envoie a été un succés."; } else { echo "t'as foiré #YOLO."; } Bonne programmation à tous! Cordialement, Mars073 1 Quote
Azad Posted April 8, 2014 Report Posted April 8, 2014 Merci du partage +1 rep. ^^ Simple, mais néanmoins pratique. Quote
Vans Posted April 8, 2014 Report Posted April 8, 2014 Merci pour ce partage, c'est sympathique. Quote
sugatasei Posted March 5, 2015 Report Posted March 5, 2015 Pour complèter le topic, je vous propose une méthode alternative : CURL Avantages : beaucoup plus rapide surtout pour les gros fichiers plus d'options : possibilité de faire des requètes en https signées par certificat. Inconvéniant : la librairie php5_curl doit être dispo sur votre serveur. Je vous partage un exemple : <?php class Post_curl { /* Attributs * ******************************************************************************************** */ private $url = NULL; private $data = NULL; /* Constructeurs et assesseurs * ******************************************************************************************** */ /** * Constructeur * @param string $url * @param array $data */ public function __construct($url = FALSE, $data = FALSE) { if ($url) { $this->setUrl($url); } if ($data) { $this->setData($data); } } /** * Set Url * @param string $url */ public function setUrl($url) { $this->url = trim($url); } /** * Set data * @param array $data */ public function setData($data) { if (is_object($data)) { $this->data = get_object_vars($data); } else { $this->data = $data; } $this->data = $this->encodeData($this->data); } /* Methodes publiques * ******************************************************************************************** */ /** * Envoi de la requete * @return mixed : Resultats de la requete */ public function send() { $return = FALSE; if (is_null($this->url)) { throw new Exception("URI not found"); } else if (is_null($this->data)) { throw new Exception("Data not found"); } else { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $this->url); curl_setopt($ch, CURLOPT_POST, $this->rcount($this->data)); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($this->data)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); $return = curl_exec($ch); } return ($return) ? $return : curl_error($ch); } /* Methodes privees * ******************************************************************************************** */ /** * Fonction d'encodage des caracteres * @param array $data * @return array */ private function encodeData($array) { foreach ($array as &$value) { if (is_array($value)) $this->encodeData($value); else if (!mb_detect_encoding($value, 'UTF-8', true)) $value = utf8_encode($value); } return $array; } /** * Nombre d'elements d'un tableau recursivement * @param array $array * @return int */ private function rcount($array) { $count = 0; if (is_array($array)) { foreach ($array as $value) { if (!is_array($value)) { $count++; } else { $count = ($count + $this->rcount($value)); } } } return $count; } } /* End of file Post_curl.class.php */ 1 Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.