wake-up-neo.net

PHP file_get_contents () gibt "Fehler beim Öffnen des Streams: HTTP-Anforderung fehlgeschlagen!"

Ich habe Probleme beim Aufrufen einer URL aus dem Code PHP. Ich muss einen Dienst mithilfe einer Abfragezeichenfolge aus dem Code PHP. Wenn ich die URL eingebe In einem Browser funktioniert es in Ordnung, aber wenn ich file-get-contents () verwende, um den Aufruf zu tätigen, erhalte ich:

Warnung: Datei-Get-Contents (http: // ....) konnte den Stream nicht öffnen: HTTP-Anforderung fehlgeschlagen! HTTP/1.1 202 Akzeptiert in ...

Der Code, den ich benutze, ist:

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

Wie gesagt - vom Browser aus anrufen und es funktioniert einwandfrei. Irgendwelche Vorschläge?

Ich habe es auch mit einer anderen URL versucht:

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

Das funktioniert gut ... könnte es sein, dass die URL, die ich aufrufen muss, einen zweiten http:// Enthält?

78
undefined

Versuchen Sie es mit 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);

?>
100
James Hall
25
SilentGhost
<?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( "&amp;", "&", 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 );
    }
}


?>
21
pangeli

file_get_contents() verwendet die Wrapper fopen(), daher ist der Zugriff auf URLs über allow_url_fopen Option in der php.ini.

Sie müssen entweder Ihre php.ini ändern, um diese Option zu aktivieren, oder Sie verwenden eine alternative Methode, nämlich cURL - die bei weitem beliebteste und ehrlich gesagt übliche Methode, um das zu erreichen, was Sie versuchen machen.

20
Michael Wales

Ich stelle fest, dass Ihre URL Leerzeichen enthält. Ich denke, das ist normalerweise eine schlechte Sache. Versuchen Sie, die URL mit zu codieren

$my_url = urlencode("my url");

und dann anrufen

file_get_contents($my_url);

und sehen Sie, ob Sie mehr Glück haben.

7
shady

Grundsätzlich müssen Sie einige Informationen mit der Anfrage senden.

Versuche dies,

$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);

Das hat für mich geklappt

7
d_bhatnagar

Ich bin mir nicht sicher, ob die Parameter (mpaction, format) für die amazonaws-Seite oder ##. ## angegeben sind.

Versuchen Sie, rlencode () die URL.

3
alexn

Ich habe ein ähnliches Problem, ich habe die YouTube-URL analysiert. Der Code ist;

$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'] : '';

Dann stelle ich fest, dass $this->video_url Das Leerzeichen enthält. Ich habe das mit trim($this->video_url) gelöst.

Vielleicht hilft es dir. Viel Glück

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