Aller au contenu | Aller au menu | Aller à la recherche


Web request HTTP GET POST avec PHP

Comment faire une requête HTTP (GET ou POST) depuis PHP ?

Avec PHP, il existe entre autre :

PHP Natif (inclus ou avec librairies PHP à ajouter)

CURL

HTTP (pecl_http)

file_get_contents

Lit tout un fichier dans une chaîne, donc le résultat de la page web si elle a répondue. Selon les besoins vous aurez besoin de paramétrer le contexte de flux avec stream_context_create.

Par exemple : How do I send a POST request with PHP? CURL-less method with PHP5

Ensuite si vous souhaitez obtenir le status de réponse du serveur (En-têtes de réponse HTTP), utiliser la variable prédéfinie $http_response_header

$url = 'http://server.com/path';
$data = array(
		'param1' => 'value1',
		'param2' => 'value2'
);
 
// use key 'http' even if you send the request to https://...
$options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
        'method'  => 'POST',
        'content' => http_build_query($data),
    ),
);
$context  = stream_context_create($options);
$result = file_get_contents($url, false, $context);
 
echo "-- REQUEST ------------------------------" . PHP_EOL;
echo "URL: " . $url . PHP_EOL;
echo "DATA: " . print_r($data, true);
 
echo "-- HEADER ------------------------------" . PHP_EOL;
print_r($http_response_header);
 
echo "-- BODY ------------------------------" . PHP_EOL;
var_dump($result);
 
// array(7) {
//   [0]=>
//   string(15) "HTTP/1.1 200 OK"
//   [1]=>
//   string(35) "Date: Tue, 04 Nov 2014 11:00:09 GMT"
//   [2]=>
//   string(14) "Server: Apache"
//   [3]=>
//   string(34) "X-Powered-By: PHP/5.3.8-1~dotdeb.1"
//   [4]=>
//   string(21) "Vary: Accept-Encoding"
//   [5]=>
//   string(17) "Connection: close"
//   [6]=>
//   string(23) "Content-Type: text/html"
// }
 
// Ou NULL si pas de réponse 
// PHP Warning:  file_get_contents(http://server.com/path): failed to open stream: php_network_getaddresses: getaddrinfo failed: H¶te inconnu.
// PHP Notice:  Undefined variable: http_response_header
// NULL
 
echo "-- ANALYSE ------------------------------" . PHP_EOL;
if(!empty($http_response_header)) {
	$arr = preg_split('/ /', $http_response_header[0]);
	echo 'Status:' . $arr[1] . PHP_EOL;
// Status:200
}

PHP Libraire Framework

Zend_Http_Client

Zend_Http_Client fournit une interface qui permet d'utiliser le protocole HTTP (Hyper-Text Transfer Protocol). Zend_Http_Client supporte les fonctionnalités de base d'un client HTTP, ainsi que des fonctionnalités plus avancées, comme l'authentification ou l'upload de fichiers. Toutes les requêtes retournent un objet Zend_Http_Response, avec lequel on pourra accéder au corps ou aux en-têtes de la réponse HTTP (voyez Zend_Http_Response).

Ressources

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

Fil des commentaires de ce billet