2012-02-04 3 views
6

J'essaie de télécharger des fichiers de boucle de musique à partir de ce site: looperman.com. Je me suis inscrit en tant qu'utilisateur et j'essaye de télécharger les boucles en utilisant cURL. Lorsque vous vous connectez à looperman.com, il y a quelques cookies réglés, mais par processus d'élimination, je remarque que le seul sur ce qui est requis pour que le serveur vous voit connecté est nommé 'loopermanlooperman'.Valeur de cookie cURL

J'ai saisi la valeur de ce cookie et l'ai défini en tant que variable. Ensuite, je passe au site comme si:

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

Quand je fais l'écho de la réponse, je vois le cookie n'a pas été défini, et le site me voit toujours comme pas loggué Qu'est-ce que je fais mal.? Looperman est construit en utilisant CodeIgniter. Je me demande s'ils ont une certaine mesure de protection pour éviter de mettre des cookies comme celui-ci?

/// /// MISE A JOUR

J'ai essayé COOKIE_JAR et CURLOPT_COOKIE. Les cookies ne sont toujours pas définis. J'ai trouvé ce script à partir d'un autre post de Stack Overflow qui semble m'apporter la plupart du temps, mais les cookies sont toujours définis. Ici, il est:

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

Lorsque ce rendement, le contenu de D: \ wamp2 \ www \ sandbox \ cookie.txt sont:

 
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 

Mais looperman ne me voit pas encore comme connecté :(

+0

ceci à la place [cookie jar] (http://icfun.blogspot.com/2009/04/php-how-to-use-cookie-jar-with-curl.html) – hackartist

+0

Mon édition ci-dessus utilise CURLOPT_COOKIEJAR et CURLOPT_COOKIEFILE. Semble n'avoir aucun effet. –

Répondre

11

Vous devez utiliser CURLOPT_COOKIE pas CURLOPT_HTTPHEADER pour définir les valeurs des cookies envoyés dans la demande.

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

CURLOPT_COOKIE

Le contenu du "Cookie:" En-tête à utiliser dans la requête HTTP. Notez que plusieurs cookies sont séparés par un point-virgule suivi d'un espace (par exemple, "fruit = pomme; color = red")

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

Il ne fait CURL envoyer le cookie. Essayez de demander un script qui affiche le contenu des en-têtes comme ceci;

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

Il se peut que le site vérifie la référence ou l'hôte dans votre en-tête. Vous pouvez toujours essayer de regarder les demandes faites dans un navigateur (en chrome aller Spanner -> Outils -> Outil de développement -> Réseau, maintenant demander la page et cliquez sur la demande dans la liste.Afficher tous les en-têtes)

+0

J'ai essayé cela, n'a pas fonctionné: curl_setopt ($ ch, CURLOPT_COOKIE, "fruit = pomme") –

+0

Aussi, n'oubliez pas de lire les CGV des sites pour voir si vous êtes autorisé à accéder aux fichiers de cette manière. –