Manuel PHP
Précédent | Annexe M. Liste des protocoles supportés | Suivant

# HTTP et HTTPS

PHP 3, PHP 4, PHP 5. `https://` depuis PHP 4.3.0

- `http://example.com`

- `http://example.com/file.php?var1=val1&var2=val2`

- `http://user:motdepasse@example.com`

- `https://example.com`

- `https://example.com/file.php?var1=val1&var2=val2`

- `https://user:motdepasse@example.com`

Permet des accès en lecture uniquement, pour des fichiers accessibles sur le réseau avec la méthode GET de HTTP 1.0. Un en-tête Host: est envoyé avec la requête, pour gérer les hôtes virtuels, basés sur des noms. Si vous avez configuré une version de navigateur avec l'option user_agent dans votre fichier `php.ini`, ou via le contexte de flux, il sera aussi utilisé dans votre requête.

Avertissement

Lorsque vous utilisez SSL, le serveur IIS de Microsoft violera le protocole en fermant la connexion sans envoyer l'indicateur close_notify. PHP le reportera en tant que "SSL: Fatal Protocol Error" quand vous arrivez à la fin des données. L'astuce est de baisser le niveau de la directive error_reporting pour ne pas inclure les warnings. À partir de PHP 4.3.7, le bogue est détecté automatiquement lors de l'ouverture du flux en utilisant https:// et supprimera cet avertissement pour vous. Si vous utilisez fsockopen() pour créer une socket ssl://, vous devez vous occuper vous même de supprimer l'erreur.

Les redirections sont supportées depuis PHP 4.0.5; si vous utilisez une version plus ancienne, vous devrez ajouter vous-même les slash finaux dans vos URL. S'il est important de connaître l'URL de la ressource qui vous a fourni le document, une fois que toutes les redirections ont été suivies, vous devez analyser les en-têtes de réponses retournés par le flux.

Exemple M-2. http:// et redirections

`<?php
$url = 'http://www.example.com/redirecting_page.php';
$fp = fopen($url, 'r');
/* Avant PHP 4.3.0 utilisez $http_response_header
au lieu de stream_get_meta_data() */
$meta_data = stream_get_meta_data($fp);
foreach($meta_data['wrapper_data'] as $response) {
/* Redirections? */
if (substr(strtolower($response), 0, 10) == 'location: ') {
/* modification de $url avec la nouvelle URL */
$url = substr($response, 18);
}
}
?>`

Exemple M-3. Analyse une page et envoie des données avec la méthode POST

`<?php $postdata = http_build_query( array( 'var1' => 'du contenu', 'var2' => 'doh' ) ); $opts = array('http' => array( 'method' => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => $postdata ) ); $context = stream_context_create($opts); $result = file_get_contents('http://example.com/submit.php', false, $context); ?>`

Le flux donne l'accès au corps (body) de la ressource. Les en-têtes sont stockés dans la variable $http_response_header. Depuis PHP 4.3.0, les en-têtes sont aussi accessibles avec la fonction stream_get_meta_data().

Les connexions HTTP sont en lecture seule. Vous ne pouvez pas écrire dans des fichiers ouverts via le protocole HTTP.

> Note : HTTPS est supporté depuis PHP 4.3, si vous avez compilé le support d'OpenSSL.

Tableau M-2. Résumé des gestionnaires

Attribut | Supporté
--- | ---
Limité par allow_url_fopen. | Oui
Autorisé en lecture | Oui
Autorisé en écriture | Non
Autorisé en ajout | Non
Autorise les lectures / écritures simultanées | Non applicable
Supporte stat() | Non
Supporte unlink() | Non
Supporte rename() | Non
Supporte mkdir() | Non
Supporte rmdir() | Non

Tableau M-3. Options de contexte (depuis PHP 5.0.0)

Nom | Utilisation | Par défaut
--- | --- | ---
method | `GET`, `POST`, ou une autre méthode HTTP acceptée par le serveur distant. | `GET`
header | Les autres en-têtes envoyés durant la requête. Les valeurs de cette option remplaceront les valeurs déjà configurées (comme User-agent:, Host:, et Authentication:). |
user_agent | Valeur à envoyer pour l'en-tête User-Agent:. Cette valeur sera utilisée si un type de navigateur n'est pas spécifié dans l'option de contexte header ci-dessus. | Directive dans le `php.ini` : user_agent.
content | D'autres données envoyées après les en-têtes. Typiquement, utilisé pour placer les requêtes POST ou PUT. |
proxy | URI du serveur de proxy. (i.e. tcp://proxy.example.com:5100 ). Les proxys HTTPS (via les proxys HTTP) ne fonctionnent qu'avec PHP 5.1.0 ou supérieur. |
max_redirects | Le nombre maximum de redirection à suivre. Une valeur de 1 ou inférieure signifie qu'aucune redirection n'est suivie. Ajouté en PHP 5.1.0. | 20
request_fulluri | Lorsque cette option vaut `TRUE`, l'URI entière sera utilisée lors de la construction de la requête. (i.e. GET http://www.example.com/path/to/file.html HTTP/1.0). Même si ce n'est pas la méthode standard, certains proxies le requièrent. | `FALSE`

> Options de contexte pour les sockets : Plusieurs options de contexte supplémentaires sont supportées par le gestionnaire de transport Pour les flux http://, voyez les options de contexte du transport tcp://. Pour les flux https://, voyez les options de contexte du transport ssl://.

Les en-têtes personnalisés peuvent être envoyés avec une requête HTTP dans les versions antérieures à la version 5 en tirant avantage d'un effet de bord dans la gestion de la configuration INI de user_agent. Définissez user_agent en n'importe quelle chaîne valide (comme la chaîne par défaut, PHP/version) suivi d'un caractère de retour chariot et d'un caractère de nouvelle ligne, suivis des en-têtes additionnels. Cette méthode fonctionne en PHP 4 ainsi que toutes les versions suivantes.

Exemple M-4. Envoi d'en-têtes personnalisés avec une requête HTTP

`<?php ini_set('user_agent', "PHP\r\nX-MyCustomHeader: Foo"); $fp = fopen('http://www.example.com/index.php', 'r'); ?>`

Équivaut à la requête suivante :

    GET /index.php HTTP/1.0
    Host: www.example.com
    User-Agent: PHP
    X-MyCustomHeader: Foo

Précédent | Sommaire | Suivant
Socket | Niveau supérieur | FTP et FTPS