php - file_get_contents() give me 403 Forbidden - Stack Overflow

Rhaa… certains sites refusent les requêtes quand c’est PHP qui les fait.

Ça marche en revanche si on utilise Curl.
(ça doit être pour ça que linx me refuse certaines récupérations de titres, même si je met un user-agent valide).

(Exemple avec file_get_contents sur http://www.legorafi.fr/feed/ …)


ÉDIT Benjamin me signale que file_get_contents doit pouvoir marcher aussi si marcher aussi, mais que ça vient de headers manquants.
Et en effet, avec le header « Accept: text/html… » ça marche sur le gorafi.fr.


Du coup voilà ce que j’ai (dans BT, d’où le BT-UA dans l’UA :p) :

function get_external_file($url, $timeout=10) {
$context = stream_context_create(array('http'=>array(
'user_agent' => 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:28.0 BlogoText-UA) Gecko/20100101 Firefox/28.0',
'timeout' => $timeout,
'header'=> "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n",
'ignore_errors' => TRUE
))); // Timeout : time until we stop waiting for the response.
$data = file_get_contents($url, false, $context, -1, 4000000); // We download at most 4 Mb from source.
debug($data);
if (isset($data) and isset($http_response_header[0]) and (strpos($http_response_header[0], '200 OK') !== FALSE) ) {
return $data;
} else {
return FALSE;
}
}



(retourne le contenu de la page, FALSE si ça ne marche pas, connexion impossible, code réponse !200…)

ÉDIT-ÉDIT : j’ai modifié aussi dans Shaarli, @sebsauvage : https://github.com/sebsauvage/Shaarli/pull/179/files