2012-02-04 71 views
6

Tôi đang cố tải xuống các tệp vòng lặp nhạc từ trang web này: looperman.com. Tôi đã đăng ký với tư cách người dùng và tôi đang cố tải xuống các vòng lặp bằng cách sử dụng cURL. Khi bạn đăng nhập vào looperman.com, có một vài cookie được thiết lập, nhưng theo quy trình loại bỏ, tôi nhận thấy chỉ trên đó là cần thiết cho máy chủ để xem bạn như đăng nhập được đặt tên là 'loopermanlooperman'.Giá trị cookie cURL

Tôi đã lấy giá trị của cookie đó và đặt nó làm biến. Sau đó, tôi vượt qua nó để trang web như vậy:

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

Khi tôi echo Đáp lại, tôi thấy cookie chưa được thiết lập, và các trang web vẫn thấy tôi như chưa đăng nhập am i làm gì sai.? Looperman được xây dựng bằng CodeIgniter. Tôi tự hỏi nếu họ có một số biện pháp bảo vệ để ngăn chặn thiết lập cookie như thế này?

/// CẬP NHẬT ///

tôi đã cố gắng COOKIE_JAR và CURLOPT_COOKIE. Các cookie vẫn chưa được đặt. Tôi đã tìm thấy tập lệnh này từ một bài đăng Tràn ngăn xếp khác dường như khiến tôi có nhiều cách nhất, nhưng các cookie vẫn được đặt. Ở đây là:

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

Khi lợi nhuận này, các nội dung của D: \ wamp2 \ www \ sandbox \ cookie.txt là:

 
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 

Nhưng looperman vẫn không nhìn thấy tôi như đăng nhập :(

+0

Hãy thử thay vào đó [cookie jar] (http://icfun.blogspot.com/2009/04/php-how-to-use-cookie-jar-with-curl.html) – hackartist

+0

Chỉnh sửa của tôi ở trên sử dụng CURLOPT_COOKIEJAR và CURLOPT_COOKIEFILE. Dường như không có hiệu lực. –

Trả lời

11

Bạn nên sử dụng CURLOPT_COOKIE không CURLOPT_HTTPHEADER để thiết lập các giá trị cookie gửi trong yêu cầu.

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

CURLOPT_COOKIE

Nội dung của "Cookie:" tiêu đề được sử dụng trong yêu cầu HTTP. Lưu ý rằng nhiều cookie được tách bằng dấu chấm phẩy theo sau là một không gian (ví dụ, "quả táo =; color = red")

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

Nó làm CURL gửi cookie. Hãy thử yêu cầu một tập lệnh xuất ra nội dung của các tiêu đề như thế này;

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

Có thể trang web đang kiểm tra giới thiệu hoặc máy chủ lưu trữ trong tiêu đề của bạn. Bạn luôn có thể thử xem các yêu cầu được thực hiện trong trình duyệt (trong chrome go Spanner -> Tools -> Developer Tool -> Network, bây giờ yêu cầu trang và nhấp vào yêu cầu trong danh sách. Nên hiển thị tất cả tiêu đề)

+0

Tôi đã thử điều này, không hoạt động: curl_setopt ($ ch, CURLOPT_COOKIE, "fruit = apple") –

+0

Ngoài ra, hãy nhớ đọc các trang web của T & C để xem liệu bạn có được phép truy cập các tệp theo cách này hay không. –

Các vấn đề liên quan