2012-02-04 15 views
6

Sto provando a scaricare file di loop musicali da questo sito: looperman.com. Mi sono registrato come utente e sto provando a scaricare i loop usando cURL. Quando si accede a looperman.com, ci sono alcuni cookie impostati, ma per processo di eliminazione, noto che solo il server è obbligato a vederti come connesso "loopermanlooperman".valore cookie CURL

Ho afferrato il valore di quel cookie e lo ho impostato come variabile. Poi lo passo al sito in questo modo:

$sessid = 'somehashedvaluehere'; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Cookie: loopermanlooperman=$sessid;")); 
curl_setopt($ch, CURLOPT_URL, "http://www.looperman.com/loops/detail/$pageID"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$response = curl_exec($ch); 
echo $response; 

Quando mi associo alla risposta, vedo il cookie non è stata impostata, e il sito ancora mi vede come non collegato Che cosa sto facendo di sbagliato.? Looperman è costruito usando CodeIgniter. Mi chiedo se hanno qualche misura di protezione per impedire l'impostazione di cookie come questo?

/// /// UPDATE

ho cercato COOKIE_JAR e CURLOPT_COOKIE. I cookie non sono ancora impostati. Ho trovato questo script da un altro post di Overflow dello stack che sembra avere la maggior parte del modo lì, ma i cookie sono ancora impostati. Eccolo:

$loginUrl = 'http://www.looperman.com/account/login/'; 
$loginFields = array('user_email' => '[email protected]', 'user_password' => 'password'); 

getUrl($loginUrl, 'post', $loginFields); 
//now you're logged in and a session cookie was generated 

$remote_page_content = getUrl('http://www.looperman.com/loops/detail/200'); 
echo $remote_page_content; 

    function getUrl($url, $method='', $vars='') { 
    $ch = curl_init(); 
    if ($method == 'post') { 
     curl_setopt($ch, CURLOPT_POST, 1); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, $vars); 
    } 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_COOKIEJAR, 'D:\wamp2\www\sandbox\cookie.txt'); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, 'D:\wamp2\www\sandbox\cookie.txt'); 
    $buffer = curl_exec($ch); 
    curl_close($ch); 
    return $buffer; 
    } 

Quando questo ritorna, il contenuto di D: \ wamp2 \ www \ sandbox \ cookie.txt sono:

 
Netscape HTTP Cookie File 
http://curl.haxx.se/rfc/cookie_spec.html 
This file was generated by libcurl! Edit at your own risk. 

.looperman.com TRUE / FALSE 1329245288 loopermancspr 147f3f08a0b50f7aa527789e360abbc8 
.looperman.com TRUE / FALSE 1328467688 loopermanlooperman rX1UOdqyPEKkZ7HT0x8dSLk7g9yf5sSmg%2B7zj66hLM9LSmS1z4nqFO2zkEkqsUqKEwNMvEiExqSKoU2%2BfVsxlf3C9VyucMWt41TJVDtElUUIQrZxv0BmwZYP6JCJrY7wcT1%2FO7kKxRu8YI97YD%2BWdxX3jnWu2Zme9jg%2FMggp3%2Be%2BY%2FFiAorh36FR1zTbSY66VJVj7268WgMy6KNdJ1DxieypwaMb2HYGpBMsQRxcI6RawnOIEdjbaPKYuf8hVy40 

Ma looperman ancora non mi vede come loggato :(

+0

Prova questo invece [cookie jar] (http://icfun.blogspot.com/2009/04/php-how-to-use-cookie-jar-with-curl.html) – hackartist

+0

La mia modifica sopra utilizza CURLOPT_COOKIEJAR e CURLOPT_COOKIEFILE. Sembra non avere alcun effetto. –

risposta

11

si dovrebbe usare CURLOPT_COOKIE non CURLOPT_HTTPHEADER per impostare i valori dei cookie inviati nella richiesta.

curl_setopt($ch, CURLOPT_COOKIE, "loopermanlooperman=$sessid") 

CURLOPT_COOKIE

Il contenuto del "biscotto:" intestazione da utilizzare nella richiesta HTTP. Si noti che più cookie sono separati da un punto e virgola seguito da uno spazio (ad esempio, "frutto = mela; color = red")

http://www.php.net/manual/en/function.curl-setopt.php/

Si fa CURL inviare il cookie. Prova a richiedere uno script che restituisca il contenuto delle intestazioni come questo;

<?php 
echo "Your cookies \n"; 
print_r($_COOKIE); 
?> 

Potrebbe essere il sito sta controllando il referral o l'host nell'intestazione. Puoi sempre provare a guardare le richieste fatte in un browser (in Chrome vai Spanner -> Strumenti -> Strumento per sviluppatori -> Rete, ora richiedi la pagina e fai clic sulla richiesta nell'elenco. Dovresti mostrare tutte le intestazioni)

+0

Ho provato questo, non ha funzionato: curl_setopt ($ ch, CURLOPT_COOKIE, "fruit = apple") –

+0

Inoltre, ricorda di leggere i siti T & C per vedere se sei autorizzato ad accedere ai file in questo modo. –