web-dev-qa-db-fra.com

Pourquoi j'obtiens une erreur 500 lors de l'utilisation de file_get_contents (), mais fonctionne dans un navigateur?

$html = file_get_contents("https://www.[URL].com"); 
echo $html;

produit ceci dans les journaux d'erreurs:

Avertissement PHP: file_get_contents (https: // www. [URL] .com) [function.file-get-contents]: échec d'ouverture du flux: échec de la requête HTTP! Erreur de serveur interne HTTP/1.1 500 dans /Applications/MAMP/htdocs/test.php sur la ligne 13 ";

Cependant, le site fonctionne correctement dans un navigateur.

J'ai également essayé d'utiliser cURL. Je ne reçois aucune erreur dans le fichier journal, mais $html fait maintenant écho:

Erreur serveur dans l'application '/'.
La référence d'objet n'est pas définie à une instance d'un objet.

... quelques informations de débogage supplémentaires

Des idées pour contourner cela?

35
bdev

Essayez cette solution:

$opts = array('http'=>array('header' => "User-Agent:MyAgent/1.0\r\n"));
$context = stream_context_create($opts);
$header = file_get_contents('https://www.example.com',false,$context);

Si cela ne fonctionne pas, vous ne pouvez peut-être pas lire https?

71
blang

J'ai dû entrer plus de données dans l'en-tête:

$opts = array('http' => array(
    'method' => "GET",
    'header' => "User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0\r\n"
    . "Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"
    . "Accept-Encoding:gzip, deflate\r\n"
    . "Accept-Language:cs,en-us;q=0.7,en;q=0.3\r\n"
    . "Connection:keep-alive\r\n"
    . "Host:your.domain.com\r\n"
    ));
$context = stream_context_create($opts);
$html = file_get_contents($sap_url, FALSE, $context);
4
Racky