web-dev-qa-db-fra.com

file_get_contents () me donne 403 Interdit

J'ai un partenaire qui a créé un contenu pour moi à gratter.
Je peux accéder à la page avec mon navigateur, mais lors de la tentative d'utilisation de file_get_contents, je reçois un 403 forbidden.

J'ai essayé d'utiliser stream_context_create, mais ça n'aide pas - c'est peut-être parce que je ne sais pas ce qui devrait y entrer.

1) Existe-t-il un moyen pour moi de récupérer les données?
2) Si non, et si le partenaire n'est pas autorisé à configurer le serveur pour lui permettre l'accès, que puis-je faire?

Le code que j'ai essayé d'utiliser:

$opts = array(
  'http'=>array(
    'user_agent' => 'My company name',
    'method'=>"GET",
    'header'=> implode("\r\n", array(
      'Content-type: text/plain;'
    ))
  )
);

$context = stream_context_create($opts);

//Get header content
$_header = file_get_contents($partner_url,false, $context);
18
Steven

Ce n'est pas un problème dans votre script, c'est une fonctionnalité de la sécurité de votre serveur Web partenaire.

Il est difficile de dire exactement ce qui vous bloque, très probablement une sorte de blocage contre les éraflures. Si votre partenaire a accès à la configuration de ses serveurs Web, cela pourrait vous aider.

Ce que vous pouvez faire est de "simuler un navigateur Web" en définissant les en-têtes de l'agent utilisateur de manière à ce qu'ils imitent un navigateur Web standard.

Je recommanderais cURL de le faire, et il sera facile de trouver une bonne documentation pour le faire.

    // create curl resource
    $ch = curl_init();

    // set url
    curl_setopt($ch, CURLOPT_URL, "example.com");

    //return the transfer as a string
    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 contains the output string
    $output = curl_exec($ch);

    // close curl resource to free up system resources
    curl_close($ch); 
29
Cleric

// définit d'abord l'agent utilisateur

ini_set('user_agent','Mozilla/4.0 (compatible; MSIE 6.0)'); 
16
Abid Hussain

J'ai deux choses à l'esprit. Si vous ouvrez un URI avec des caractères spéciaux, tels que des espaces, vous devez coder l'URI avec urlencode () et Une URL peut être utilisée comme nom de fichier avec cette fonction si les wrappers fopen ont été activé.

0
ARIF MAHMUD RANA