Requête HTTP asynchrone en PHP

Comment envoyer une requête HTTP sans attendre de réponse ?

27 décembre 2013

Voici une manière très simple d'envoyer une requête vers un serveur HTTP sans vous soucier de la réponse : en écrivant dans un socket.

Faire un push HTTP en PHP

function httpRequestAsynchronous($url, array $params = []) {

   $urlParts = parse_url($url);

   if (!isset($urlParts['host'])) {
      return false;
   }

   $host = $urlParts['host'];

   /* /!\ Notez qu'on ne peut pas envoyer de données en clair sur le port HTTPS 443 */
   $port = isset($urlParts['port']) ? $urlParts['port'] : 80;

   if (!($fp = fsockopen($host, $port, $errno, $errstr, 5))) {
      /* Amélioration: utiliser les variables errno et errstr */
      return false;
   }

   $builtParams = http_build_query($params);
   $builtParamsLength = strlen($builtParams);

   $pathAndQuery = $urlParts['path'] . (isset($urlParts['query']) ? '/?' . $urlParts['query'] : '');

   $query = "POST " . $pathAndQuery . " HTTP/1.1\r\n";
   $query .= "Host: " . $host . "\r\n";
   $query .= "Content-Type: application/x-www-form-urlencoded\r\n";
   $query .= "Content-Length: " . $builtParamsLength . "\r\n";
   $query .= "Connection: Close\r\n\r\n";

   if ($builtParamsLength > 0) {
      $query .= $builtParams;
   }

   if (!fwrite($fp, $query)) {
      return false;
   }

   fclose($fp);

   return true;
}

Comme vous pouvez le constater, cette fonction ne fait que du POST mais elle est très facilement adaptable pour les autres méthodes HTTP.

A bientôt !

Par
Créateur et administrateur.

Dans la même catégorie

Formater un tableau pour CURLOPT_POSTFIELDS
Email avec pièce jointe en PHP
PHP : modifier les attributs privés d'un objet
Tester l'existence d'un fichier dans l'include path
Convertir récursivement un objet PHP en tableau
PHP : formater un tableau en CSV
Comment envoyer un mail en ligne de commande ?
RSYNC : Comment synchroniser des fichiers à travers une connexion ssh ?
Exécuter un code PHP en ligne de commande
Doctrine 2 : générer les classes PHP depuis la base de données
Comment catcher les erreurs en PHP ?
Doctrine 2 : comment afficher la requête SQL ?
Comment construire une URL sans caractères spéciaux en PHP ?
Comment lister les fichiers PHP inclus sur ma page ?
Les fonctions anonymes récursives en PHP
La résolution statique à la volée ou Late Static Bindings
Trouver les jours fériés français en PHP
Comment allumer son ordinateur à distance en PHP ?
Comment utiliser la balise meta viewport ?
Une version mobile de mon site avec le Zend Framework
Doctrine et le Zend Framework : Présentation, intégration et utilisation
Créer son flux RSS simplement avec Zend_Feed
Appliquer un layout sur un mail avec le Zend Framework
Comment lancer une requête multi-bases avec les fonctions MySQL ?
Implode / Explode : Du tableau à la chaine de caractères, de la chaine de caractères au tableau

Commentaire(s)