2012-02-04 42 views
6

我試圖從這個站點下載音樂循環文件:looperman.com。我已經註冊爲用戶,並且正在嘗試使用cURL下載循環。當你登錄到looperman.com時,有一些cookies被設置,但是通過排除,我注意到服務器只有在登錄時纔會看到你被命名爲'loopermanlooperman'。cURL cookie值

我已經抓住了該cookie的值,並將其設置爲一個變量。然後我把它傳遞給網站,像這樣:

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

當我呼應的反應,我看到的cookie尚未確定,而該網站仍然認爲我還是沒有登陸什麼我做錯了什麼? Looperman使用CodeIgniter構建。我想知道他們是否有一些保護措施來防止設置這樣的Cookie?

/// UPDATE ///

我試圖COOKIE_JAR和CURLOPT_COOKIE。 Cookie仍未設置。我從另一個Stack Overflow帖子中發現了這個腳本,它似乎讓我獲得了大部分的途徑,但仍然設置了cookie。那就是:

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

當這種回報,d的內容:\ wamp2 \ WWW \沙盤\ cookie.txt是:

 
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 

但looperman仍然沒有看到我的登錄:(

+0

試試這取代[餅乾罐](http://icfun.blogspot.com/2009/04/php-how-to-use-cookie-jar-with-curl.html) – hackartist 2012-02-04 18:07:05

+0

我上面的編輯使用CURLOPT_COOKIEJAR和CURLOPT_COOKIEFILE。似乎沒有效果。 – 2012-02-04 18:58:11

回答

11

您應該使用CURLOPT_COOKIECURLOPT_HTTPHEADER設置在請求中發送的cookie的值。

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

CURLOPT_COOKIE

所述的內容 「的Cookie:」 在HTTP請求中使用報頭。 (「顏色=紅色水果=蘋果」例如,)

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

它使捲曲發送cookie請注意,多個cookie用分號後面加一個空格隔開。嘗試請求一個腳本來輸出標題的內容。

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

這可能是該網站正在檢查您的標題中的引薦或主機。您可以隨時嘗試查看瀏覽器中的請求(在Chrome中打開扳手 - >工具 - >開發工具 - >網絡,現在請求該頁面並單擊列表中的請求。應顯示所有標題)

+0

我試過了,沒有工作:curl_setopt($ ch,CURLOPT_COOKIE,「fruit = apple」) – 2012-02-04 18:57:12

+0

另外,請記住閱讀站點T&C's,看看您是否被允許以這種方式訪問​​文件。 – 2012-02-04 20:51:50