我在运行OS X Lion的Mac上使用MAMP。
我需要连接到发送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不会添加cookie头。我使用HTTPScoop(类似工具的Fiddler)检查过这个。
知道可能是什么问题吗?
编辑: 我连接到ASP.Net站点。问题似乎是我没有获得ASP.NET_SessionId cookie。我得到的cookie有一个没有值的密钥,这可能就是它没有发布的原因。 知道如何强制服务器发送会话cookie吗?
答案 0 :(得分: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));
}
}