Comment corriger l'erreur: failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden

Si vous n’obtenez aucun contenu en accédant à une page web, c’est probablement qu’elle ne veut pas que vous puissiez l’obtenir. Comment identifier qu’un script tente d’accéder à la page web, et non un humain ? Généralement, il s’agit de l’en-tête User-Agent dans la requête HTTP envoyée au serveur.

Pour que le site web pense que le script qui accède à la page web est également un humain, vous devez modifier l’en-tête User-Agent au cours de la requête. La plupart des serveurs web accepteront probablement votre demande si vous attribuez à l’en-tête User-Agent une valeur utilisée par un navigateur web courant.

Vous trouverez ci-dessous une liste d’agents utilisateurs courants utilisés par les navigateurs :

  • Chrome : Mozilla/5.0 (Windows NT 10.0 ; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36
  • Firefox : Mozilla/5.0 (Windows NT 10.0 ; Win64 ; x64 ; rv:75.0) Gecko/20100101 Firefox/75.0
  • etc…
$context = stream_context_create(
    array(
        "http" => array(
            "header" => "User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36"
        )
    )
);

echo file_get_contents("www.google.com", false, $context);

Ce morceau de code simule l’agent utilisateur et envoie une requête à https://google.com.