114 votes

Le fichier PHP file_get_contents() retourne "impossible d'ouvrir le flux : échec de la requête HTTP!"

Je rencontre des problèmes pour appeler une URL depuis du code PHP. J'ai besoin d'appeler un service en utilisant une chaîne de requête depuis mon code PHP. Si je tape l'URL dans un navigateur, cela fonctionne correctement, mais si j'utilise file-get-contents() pour faire l'appel, j'obtiens :

Avertissement : file-get-contents(http://.... ) n'a pas pu ouvrir le flux : La requête HTTP a échoué ! HTTP/1.1 202 Accepté dans ...

Le code que j'utilise est le suivant :

$query=file_get_contents('http://###.##.##.##/mp/get?mpsrc=http://mybucket.s3.amazonaws.com/11111.mpg&mpaction=convert format=flv');
echo($query);

Comme je l'ai dit - ça fonctionne bien depuis le navigateur. Des suggestions ?

J'ai également essayé avec une autre URL comme :

$query=file_get_contents('http://www.youtube.com/watch?v=XiFrfeJ8dKM');

Cela fonctionne bien... est-ce que l'URL que je dois appeler aurait un deuxième http:// dedans ?

13voto

shady Points 611

Je remarque que votre URL contient des espaces. Je pense que c'est généralement une mauvaise chose. Essayez d'encoder l'URL avec

$my_url = urlencode("mon url");

puis en appelant

file_get_contents($my_url);

et voyez si vous avez plus de chance.

8voto

Jerry Points 455

J'ai un problème similaire.

En raison du délai d'expiration !

Le délai d'expiration peut être indiqué comme ceci :

$options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
        'method'  => "POST",
        'content' => http_build_query($data2),
        'timeout' => 30,
    ),
);
$context = stream_context_create($options);
$retour = @file_get_contents("http://xxxxx.xxx/xxxx", false, $context);

0 votes

Quel est le contenu à l'intérieur de $data2 ?

0 votes

Salut ! $data2 est un tableau utilisé pour passer des variables au script distant.

4voto

J'ai rencontré un problème similaire, j'ai analysé l'URL de la vidéo YouTube. Le code est le suivant;

$json_is = "http://gdata.youtube.com/feeds/api/videos?q=".$this->video_url."&max-results=1&alt=json";
$video_info = json_decode ( file_get_contents ( $json_is ), true );     
$video_title = is_array ( $video_info ) ? $video_info ['feed'] ['entry'] [0] ['title'] ['$t'] : '';

Ensuite, j'ai réalisé que $this->video_url contenait des espaces blancs. J'ai résolu cela en utilisant trim($this->video_url).

Peut-être que cela vous aidera. Bonne chance

4voto

Ezekiel Muki Points 21

Cette fonction a résolu mon problème

function file_get_contents_curl($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //Définir curl pour renvoyer les données au lieu de les imprimer dans le navigateur.
curl_setopt($ch, CURLOPT_URL, $url);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}

2voto

alexn Points 25639

Je ne suis pas sûr des paramètres (mpaction, format), s'ils sont spécifiés pour la page amazonaws ou ##.##.

Essayez d'urlencode() l'URL.

0 votes

Merci- ce sont des paramètres pour l'instance de mediaplug. Si je code l'url, cela ne fonctionne toujours pas- j'obtiens une url très bizarre dans l'erreur... ??

0 votes

Vous devez encoder uniquement la chaîne de paramètres : "convert format" devrait être "convert%20format" (ou alternativement "convert+format").

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X