2011-04-27 5 views
1

Je suis juste en train d'essayer d'aller chercher la page web yahoo. www.yahoo.comen utilisant curl de localhost

Si j'exécute mon script simple depuis mon site hébergé, cela fonctionne.

Si je le tente depuis mon hébergeur local. Tout ce que je reçois est une réponse d'en-tête avec: "w32.fp.re1.yahoo.com non compressé/chunked Mer 27 avril 2011 15:13:48 PDT"

Voici mon code:

<?php 

function curl_download($Url){ 

    // is cURL installed yet? 
    if (!function_exists('curl_init')){ 
     die('Sorry cURL is not installed!'); 
    } 


    // OK cool - then let's create a new cURL resource handle 
    $ch = curl_init(); 

    // Now set some options (most are optional) 

    // Set URL to download 
    curl_setopt($ch, CURLOPT_URL, $Url); 

    // Set a referer 
    curl_setopt($ch, CURLOPT_REFERER, "http://www.example.org/yay.htm"); 

    // User agent 
    curl_setopt($ch, CURLOPT_USERAGENT, "MozillaXYZ/1.0"); 

    // Include header in result? (0 = yes, 1 = no) 
    curl_setopt($ch, CURLOPT_HEADER, 0); 

    // Should cURL return or print out the data? (true = return, false = print) 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

    // Timeout in seconds 
    curl_setopt($ch, CURLOPT_TIMEOUT, 10); 

    // Download the given URL, and return output 
    $output = curl_exec($ch); 

    // Close the cURL resource, and free system resources 
    curl_close($ch); 

    return $output; 
} 


print curl_download('http://www.yahoo.com/'); 
?> 
+3

Qu'est-ce que votre look de code comme? – nlaq

+0

Serait utile si vous incluez la source. –

+0

nous pourrions vous aider si vous du code :) – fedmich

Répondre

1

en fait, le résultat commence par

HTTP/1.1 302 Found 

qui signifie qu'il ya un en-tête Location là-dedans. Et il y a:

Location: http://nl.yahoo.com/?p=us 

Ceci est juste le corps de la réponse:

<!-- w20.fp.ird.yahoo.com uncompressed/chunked Wed Apr 27 17:08:09 PDT 2011 --> 

Vous devez dire cURL suivre les en-têtes de l'emplacement. C'est tout.

Le nom de l'option est CURLOPT_FOLLOWLOCATION. Réglez-le à true:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 

PS
Après avoir suivi 1 Lieu-tête, c'est le début du corps de réponse quand je lance votre code + FOLLOWLOCATION:

<!DOCTYPE html> 
<html lang="nl-NL" class="y-fp-bg y-fp-pg-grad bkt732"> 
+0

Je reçois effectivement un 200 OK, pas une redirection 302. – airnet

+0

Si vous obtenez la réponse que j'ai (mon 3ème bloc de code), vous obtenez un 302. Ce morceau (vous appelez en-têtes) n'est pas un en-tête mais un corps de réponse. J'ai utilisé votre code ** exact ** dans mon test. – Rudie