effectuer une requête POST
-
<p>Bonjour à tous,<br/>
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<br/><br/>
à quoi ça sert?<br/>
quand vous désirez faire un système distant un peu sécurisé <span style="font-size:10px;"><strike>ou quand quelqu'un vous ennuie et qu'il n'a pas d'anti-robot sur sa page d'inscription...</strike></span><br/>
</p>
<pre class="ipsCode prettyprint lang-auto">
/*
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."; }</pre>
<p>Bonne programmation à tous!<br/>
Cordialement,<br/>
Mars073</p> -
<p>Pour complèter le topic, je vous propose une méthode alternative : CURL</p>
<p> </p>
<p>Avantages : </p>
<p>beaucoup plus rapide surtout pour les gros fichiers</p>
<p>plus d'options : possibilité de faire des requètes en https signées par certificat.</p>
<p> </p>
<p>Inconvéniant :</p>
<p>la librairie php5_curl doit être dispo sur votre serveur.</p>
<p> </p>
<p>Je vous partage un exemple : </p>
<pre class="ipsCode prettyprint">
<?phpclass 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 */
</pre>
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login
<br/>