J'ai des problèmes pour appeler une URL à partir de PHP code. J'ai besoin d'appeler un service à l'aide d'une chaîne de requête à partir de mon PHP. Si je tape l'URL dans un navigateur, cela fonctionne bien, mais si j'utilise file-get-contents () pour effectuer l'appel, je reçois:
Avertissement: échec de l'ouverture du flux de fichiers (get: contents) (http: // ....): échec de la demande HTTP! HTTP/1.1 202 Accepté dans ...
Le code que j'utilise est:
$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 - appelez depuis le navigateur et cela fonctionne bien. Aucune suggestion?
J'ai aussi essayé avec une autre URL telle que:
$query=file_get_contents('http://www.youtube.com/watch?v=XiFrfeJ8dKM');
Cela fonctionne bien ... est-ce que l'URL que je dois appeler a une seconde http://
dedans?
Essayez d'utiliser cURL.
<?php
$curl_handle=curl_init();
curl_setopt($curl_handle, CURLOPT_URL,'http://###.##.##.##/mp/get?mpsrc=http://mybucket.s3.amazonaws.com/11111.mpg&mpaction=convert format=flv');
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Your application name');
$query = curl_exec($curl_handle);
curl_close($curl_handle);
?>
Cela pourrait-il être votre problème?
<?php
$lurl=get_fcontent("http://ip2.cc/?api=cname&ip=84.228.229.81");
echo"cid:".$lurl[0]."<BR>";
function get_fcontent( $url, $javascript_loop = 0, $timeout = 5 ) {
$url = str_replace( "&", "&", urldecode(trim($url)) );
$cookie = tempnam ("/tmp", "CURLCOOKIE");
$ch = curl_init();
curl_setopt( $ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1" );
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_COOKIEJAR, $cookie );
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
curl_setopt( $ch, CURLOPT_ENCODING, "" );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_AUTOREFERER, true );
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false ); # required for https urls
curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, $timeout );
curl_setopt( $ch, CURLOPT_TIMEOUT, $timeout );
curl_setopt( $ch, CURLOPT_MAXREDIRS, 10 );
$content = curl_exec( $ch );
$response = curl_getinfo( $ch );
curl_close ( $ch );
if ($response['http_code'] == 301 || $response['http_code'] == 302) {
ini_set("user_agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1");
if ( $headers = get_headers($response['url']) ) {
foreach( $headers as $value ) {
if ( substr( strtolower($value), 0, 9 ) == "location:" )
return get_url( trim( substr( $value, 9, strlen($value) ) ) );
}
}
}
if ( ( preg_match("/>[[:space:]]+window\.location\.replace\('(.*)'\)/i", $content, $value) || preg_match("/>[[:space:]]+window\.location\=\"(.*)\"/i", $content, $value) ) && $javascript_loop < 5) {
return get_url( $value[1], $javascript_loop+1 );
} else {
return array( $content, $response );
}
}
?>
file_get_contents()
utilise les wrappers fopen()
, par conséquent, il est interdit d'accéder aux URL via le allow_url_fopen
option dans php.ini.
Vous devrez soit modifier votre php.ini pour activer cette option, soit utiliser une méthode alternative, à savoir cURL - de loin le moyen le plus populaire et, pour être honnête, standard pour accomplir ce que vous essayez d'essayer. faire.
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("my url");
puis en appelant
file_get_contents($my_url);
et voyez si vous avez plus de chance.
Vous devez fondamentalement envoyer des informations avec la demande.
Essaye ça,
$opts = array('http'=>array('header' => "User-Agent:MyAgent/1.0\r\n"));
//Basically adding headers to the request
$context = stream_context_create($opts);
$html = file_get_contents($url,false,$context);
$html = htmlspecialchars($html);
Cela a fonctionné pour moi
Je ne suis pas sûr des paramètres (mpaction, format), s'ils sont spécifiés pour la page amazonaws ou ##. ##.
Essayez de rlencode () l'URL.
J'ai un problème similaire, j'ai analysé l'URL youtube. Le code est;
$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, je réalise que $this->video_url
Inclut les espaces. J'ai résolu cela en utilisant trim($this->video_url)
.
Peut-être que ça va vous aider. Bonne chance
$query=file_get_contents('http://###.##.##.##/mp/get?' . http_build_query(array('mpsrc' => 'http://mybucket.s3.amazonaws.com/11111.mpg&mpaction=convert format=flv')));