2012-02-13 79 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