web-dev-qa-db-fra.com

HttpRequest introuvable dans php

Je veux juste faire une requête http avec des paramètres de publication. J'ai utilisé ce code

$r = new HttpRequest($url, HttpRequest::METH_POST);
$r->send();

mais je reçois cette erreur:

ErrorException [Erreur fatale]: la classe 'HttpRequest' n'est pas

J'ai ajouté extension=php_http.dll ceci à mon php.ini, mais le problème existe toujours. J'ai téléchargé le fichier php_http.dll et l'ai inséré dans le dossier ext de php mais il existait déjà, j'ai donc remplacé et j'ai toujours le même problème.

Toute aide serait appréciée

14
Moustafa Mohamed

Si vous utilisez php 5.4 ou supérieur, il ne semble pas y avoir de fichier php_http.dll à inclure dans votre bibliothèque d'extensions (sauf si quelqu'un peut en trouver un que j'ai manqué ??).

Le seul que j'ai pu trouver a généré des erreurs au démarrage du serveur Apache après la mise à jour du fichier de configuration php.ini pour inclure l'extension.

N'ayez pas peur cependant, car il semble y avoir un projet GitHub qui fournit la fonctionnalité au sein d'une classe, plutôt qu'une extension. Cliquez ici pour trouver la classe requise .

Si vous enregistrez cette classe dans votre projet et appelez ainsi;

include_once('HttpRequest.php'); //where HttpRequest.php is the saved file
$url= 'http://www.google.com/';
$r = new HttpRequest($url, "POST");
var_dump($r->send());

A défaut, il semblerait que la seule autre option viable serait de compiler le .dll à partir de la source ici :(

Sinon, une autre option serait d'utiliser à la place cURL. cURL fournit la plupart (sinon la totalité) des fonctionnalités de httpRequest.

Un exemple simple de ceci serait;

$url = "http://www.google.com/";        
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HEADER, TRUE); 
curl_setopt($ch, CURLOPT_NOBODY, TRUE); // remove body 
$head = curl_exec($ch); 
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
curl_close($ch); 
var_dump($head);

Plus de détails et de meilleurs exemples peuvent être trouvés sur le site Web de php ici

J'espère que cela aidera à répondre à votre question, plutôt que de vous en laisser plus ...

8
guyver4mk

Vous devez vous assurer que vous disposez d'un php_http.dll Qui correspond à votre PHP. Vous pouvez faire <?php phpinfo(); pour vérifier que les extensions sont chargées (recherchez "http ", il listera la version et les classes disponibles).

Si l'extension n'apparaît pas dans phpinfo(), vous devriez vérifier vos journaux pour savoir d'où vient le problème ou exécuter le binaire PHP directement à partir de l'invite de commande - php -i. S'il y a une erreur lors du chargement d'une bibliothèque dynamique, elle apparaîtra dans une boîte de dialogue. Notez que PHP continuera de fonctionner même si une extension n'a pas pu se charger.

4
user555

vous pouvez réinstaller le package

$ pecl install -f pecl_http-1.7.6

ou accéder aux données en utilisant curl comme cet extrait

4
tony gil