2012-02-13 33 views
0

在運行OS X Lion的Mac上使用MAMP。CURLOPT_COOKIEFILE不會追加Cookie標頭

我需要連接到發送cookie的遠程站點。 除Cookie部分外,一切順利。 對於cookie的一部分,我正在使用此代碼:

$cookieFile = dirname(__FILE__).'/cookie.txt'; 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieFile); 

的CURLOPT_COOKIEJAR部分並創建一個cookie,但後續請求CURLOPT_COOKIEFILE不添加餅乾頭。我已經使用HTTPScoop(一個類似Fiddler的工具)進行了檢查。

任何想法可能是什麼問題?

編輯: Im連接到ASP.Net站點。問題似乎是沒有得到ASP.NET_SessionId cookie。我得到的cookie有一個沒有價值的密鑰,這可能是它沒有發佈的原因。 任何想法如何強制服務器發送會話cookie?

+0

'CURLOPT_COOKIEJAR零件確實創建了一個cookie' - 您是否確認創建的文件實際上具有cookie值並且不是空的?你能否從第一個請求的響應頭部確認「Set-Cookie」頭部存在? – drew010 2012-02-13 23:49:15

+0

檢查,cookie被創建並且內容反映頭的值。 – Arnoldiusss 2012-02-13 23:52:11

+0

我有點茫然,那麼你是否願意發佈更完整的代碼,也許你試圖訪問的網站的URL,所以我可以試試? – drew010 2012-02-14 00:12:09

回答

1

我們真的需要看到更多的代碼,但這裏有一個示例位,它從初始請求中收集會話cookie,然後在後續POST中使用它。它使用匿名代理在任意URL上運行GET請求,希望它可以幫助你(雖然它不使用COOKIEJAR,但我認爲它可能仍然有幫助)。

<?php 
define('TARGET_URL', 'http://moxune.com'); 
echo 'Sending initial request' . PHP_EOL; 
$aHeaders = get_headers("http://420proxy.info"); 

foreach($aHeaders as $sHeader) { 
    if(stripos($sHeader, 'set-cookie') !== false) { 
     // extract the cookie from the first response 
     $aCookie = explode(':', $sHeader); 
     $sCookie = trim(array_pop($aCookie)); 
     $oCookie = http_parse_cookie($sCookie); 

     echo 'Cookie extracted, trying to POST now' . PHP_EOL; 

     // OK, now let's try the POST request 
     $ch = curl_init('http://420proxy.info/includes/process.php?action=update'); 
     curl_setopt($ch, CURLOPT_REFERER, '420.proxy.info'); 
     curl_setopt($ch, CURLOPT_POST, true); 
     curl_setopt($ch, CURLOPT_COOKIE, $sCookie); 
     curl_setopt($ch, CURLOPT_HEADER, true); 
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 

     curl_setopt($ch, CURLINFO_HEADER_OUT, true); 
     curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect: 100-continue')); 

     //curl_setopt($ch, CURLOPT_COOKIE, http_build_cookie((array)$oCookie)); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, array(
      'u' => TARGET_URL, 
      'allowCookies' => 'off', 
      'encodeURL' => 'off', 
      'stripJS' => 'on' 
      ) 
     ); 

     $response = curl_exec($ch); 

     die(var_dump($response)); 
    } 
} 
+0

有用的代碼,thanx。我的問題是我沒有完全模仿我的登錄請求中發佈的值。之後我修復了一個填充的會話cookie被設置併發布在隨後的帖子中。 – Arnoldiusss 2012-02-14 08:59:07

+0

很高興聽到你讓它工作。 – quickshiftin 2012-02-14 16:44:21