2010-05-31 3 views
4

J'ai besoin d'obtenir le contenu de la page Web, je ne peux pas utiliser Curl car il n'est pas activé.J'ai essayé le code ci-dessous Mais cela ne fonctionne pas.Comment obtenir le contenu d'une page Web sans CURL?

$opts = array(
    'http'=>array(
    'method'=>"GET", 
    'header'=>"Accept-language: en\r\n" . 
       "Cookie: foo=bar\r\n" 
) 
); 

$context = stream_context_create($opts); 

$fp = fopen($_GET['url'], 'r', false, $context); 
if($fp) 
fpassthru($fp); 
fclose($fp); 
exit; 

Le code produit une erreur

Warning: fopen(http://www.google.com/search?&q=site:www.myspace.com+-intitle:MySpaceTV+%22Todd Terje%22) [function.fopen]: failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request 

Répondre

4

Avez-vous remarqué qu'il y a un espace ACTUEL dans votre URL entre Todd et Terje? Cela peut causer votre problème, car le navigateur l'encodent généralement à + ou %20.

+0

Ce que je peux dire "Vous règles": P Eagle eye;) .Oui ce problème était !! – Arshdeep

+7

Pour marquer cette réponse comme "You rules", cliquez sur la coche verte à gauche. – Douglas

3

Vous pouvez utiliser la fonction file_get_contents pour que:

$content = file_get_contents('url/filepath here'); 
echo $content; 

Note: Si vous voulez lire par exemple protocole sécurisé https, assurez-vous que vous avez openssl ex tension activée de php.ini.

Mise à jour:

D'après ce que vous dites, je suppose que vous avez allow_url_fopen paramètres désactivé à partir du fichier php.ini, vous devez tourner que sur d'être en mesure de lire urls.

Mise à jour 2:

Il vous semble ne spécifiez pas l'URL correcte, je viens de vérifier, par exemple, si vous mettez simplement en www.google.com, il fonctionne très bien:

$url = 'http://www.google.com'; 
$content = file_get_contents($url); 
echo $content; 
+0

Ouais je l'ai déjà essayé, ERROR "Warning: file_get_contents () [function.file- get-contents]: n'a pas réussi à ouvrir le flux: la requête HTTP a échoué! HTTP/1.0 400 Bad Request " – Arshdeep

+0

@Arsheep: Voir ma mise à jour s'il vous plaît. – Sarfraz

+0

Ok, j'ai vu, pas une URL sécurisée "et allow_url_fopen = On" j'ai vérifié – Arshdeep

1

Vous pouvez spécifiez en fait une URL au lieu d'un nom de fichier dans file_get_contents.

+0

je sais bro je l'ai déjà essayé, ERREUR "Avertissement: file_get_contents () [fonction.file-get-contents]: Échec de l'ouverture du flux: requête HTTP a échoué! HTTP/1.0 400 Bad Request" – Arshdeep

0

utiliser sniffer comme WireShark pour obtenir le contenu de la demande du navigateur. Ensuite, copiez-le et supprimez-les un par un, bientôt vous obtiendrez les en-têtes minimum requis.

4

vous pouvez utiliser le code à l'ancienne, comme:

$CRLF = "\r\n"; 
$hostname = "www.something.com"; 

$headers[] = "GET ".$_GET['url']." HTTP/1.1"; 
$headers[] = "Host: ".$hostname; 
$headers[] = "Accept-language: en"; 
$headers[] = "Cookie: foo=bar"; 
$headers[] = ""; 

$remote = fsockopen($hostname, 80, $errno, $errstr, 5); 
// a pinch of error handling here 

fwrite($remote, implode($CRLF, $headers).$CRLF); 

$response = ''; 

while (! feof($remote)) 
{ 
    // Get 1K from buffer 
    $response .= fread($remote, 1024); 
} 

fclose($remote); 

Mise à jour: bonne chose au sujet de cette solution est qu'elle ne repose pas sur les enveloppes fopen.

-1
php file_get_contents() function 

nadeausoftware.com/articles/2007/07/php_tip_how_get_web_page_using_fopen_wrappers

/** 
* Get a web file (HTML, XHTML, XML, image, etc.) from a URL. Return an 
* array containing the HTTP server response header fields and content. 
*/ 
function get_web_page($url) 
{ 
    $options = array(
     CURLOPT_RETURNTRANSFER => true,  // return web page 
     CURLOPT_HEADER   => false, // don't return headers 
     CURLOPT_FOLLOWLOCATION => true,  // follow redirects 
     CURLOPT_ENCODING  => "",  // handle all encodings 
     CURLOPT_USERAGENT  => "spider", // who am i 
     CURLOPT_AUTOREFERER => true,  // set referer on redirect 
     CURLOPT_CONNECTTIMEOUT => 120,  // timeout on connect 
     CURLOPT_TIMEOUT  => 120,  // timeout on response 
     CURLOPT_MAXREDIRS  => 10,  // stop after 10 redirects 
    ); 

    $ch  = curl_init($url); 
    curl_setopt_array($ch, $options); 
    $content = curl_exec($ch); 
    $err  = curl_errno($ch); 
    $errmsg = curl_error($ch); 
    $header = curl_getinfo($ch); 
    curl_close($ch); 

    $header['errno'] = $err; 
    $header['errmsg'] = $errmsg; 
    $header['content'] = $content; 
    return $header; 
} 

thx: http://nadeausoftware.com/articles/2007/06/php_tip_how_get_web_page_using_curl

+0

WOW, je pense que vous oubliez la question "Comment obtenir le contenu d'une page Web sans CURL?" – Arshdeep

+0

Je downvoted parce que l'OP ne voulait pas utiliser CURL. Cependant, si vous supprimez le bit curl et que vous incluez un exemple de code n'utilisant pas CURL, je peux probablement vous mettre en colère. –

Questions connexes