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
Azad Posted April 8, 2014 Report Posted April 8, 2014 Merci du partage +1 rep. ^^ Simple, mais néanmoins pratique.
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
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now