Aller au contenu

effectuer une requête POST


mars073
 Share

Recommended Posts

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

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

  • 10 months later...

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 */
  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Invité
Répondre à ce sujet…

×   Vous avez collé du contenu avec mise en forme.   Supprimer la mise en forme

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Chargement
 Share

×
×
  • Créer...