J’essaie d’accéder à l’URL « http://webcache.googleusercontent.com/search?q=cache:http://example.com/ » du site Google.
Cela fonctionne bien lorsque je l’ouvre dans le navigateur, mais pas lorsque j’essaie de l’ouvrir à l’aide de php file_get_contents. J’obtiens cette erreur :
Warning: file_get_contents(http://webcache.googleusercontent.com/search?q=cache:http://example.com/) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden in /homepages/20/files/htdocs/projects/script.php on line 20
Merci de m’aider ou de me suggérer une autre méthode pour que je reçoive la sortie de cette URL dans mon code.
Si la requête utilise https, il peut aussi y avoir une erreur dans la vérification du certificat, voir CURLOPT_SSL_VERIFYPEER. Exemple:
curl_setopt($ch, CURLOPT_URL, 'https://example.com');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // <- Ajouter cette ligne si le lien comporte https
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
Il ne s’agit pas d’un problème lié à votre script, mais à la ressource que vous demandez. Le serveur web renvoie le code d’état « Forbidden ».
Il se peut qu’il bloque les scripts PHP pour empêcher le scraping, ou votre IP si vous avez effectué trop de requêtes (attendre quelques jours et revérifier).
Vous devriez probablement vous adresser à l’administrateur du serveur distant.
Peut-être que le serveur web est configuré de manière à bloquer les requêtes de file_get_contents.
Essayez peut-être curl.
// création d'une ressource curl
$ch = curl_init();
// set url
curl_setopt($ch, CURLOPT_URL, $url);
//renvoie le transfert sous forme de chaîne de caractères
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
// $output contient le résultat
$output = curl_exec($ch);
// fermer la ressource curl pour libérer les ressources du système
curl_close($ch);
Bonjour,
En fait, il semble que la fonction file_get_contents pour les URL soit désactivée sur votre serveur. Vous devez contacter votre hébergeur et lui demander d’activer cette option.
Cordialement.
Ouvrir le php.ini sur le serveur et vérifier si le paramétre allow_url_fopen est sur On.
allow_url_fopen = on
Méthode 2:
Si vous utiliser le terminal pour exécuter les scripts PHP, la commande php appelle php.ini pour l’interface de programmation. Vérifier que l’option « user_agent » n’est pas commentée. Décommentée l’option et ajouter un agent utilisateur Mozilla.
Méthode 3:
Vérifiez les permissions sur le fichier ? Mettez 777 sur ton fichier et vérifier si le problème est résolu.
Méthode 4:
Contactez votre prestataire de services d’hébergement. Dans la plupart des cas, la meilleure façon de résoudre ce problème est de contacter votre fournisseur d’hébergement car le problème est généralement lié aux limites qu’il a fixées pour votre plan. Pour les aider à comprendre le problème, assurez-vous de fournir le message d’erreur complet et il peut également être utile d’envoyer votre fichier de log d’erreur.