PHP cURL POST DATA [проблема перенаправления 302]

Я использую следующий код для входа на сайт

$postData = array("login" => "Prijava", "loginEmail" => "****@****.***", "password" => "*****t", "signonForwardAction" => "/press/cm/si.press.viasat.tv?cc=si&lc=si");

$URL = "http://si.press.viasat.tv/press/cm/1.167?cc=si&lc=si";

$connection = curl_init();
curl_setopt($connection, CURLOPT_URL, $URL);
curl_setopt($connection, CURLOPT_POST, 1);

curl_setopt($connection, CURLOPT_POSTFIELDS, $postData);

curl_setopt($connection, CURLOPT_FOLLOWLOCATION, true);

curl_setopt($connection, CURLOPT_REFERER, "http://si.press.viasat.tv");
curl_setopt($connection, CURLOPT_AUTOREFERER, true);
curl_setopt($connection, CURLOPT_HEADER, true);
curl_setopt($connection, CURLOPT_POSTREDIR, 2);

curl_setopt($connection,CURLOPT_COOKIEJAR, "C:\@DEV\TextALG\cookie.txt");
curl_setopt($connection,CURLOPT_COOKIEFILE, "C:\@DEV\TextALG\cookie.txt");

curl_exec($connection);



curl_close($connection);

Проблема (как обнаружено в Firebug) заключается в том, что после входа в систему сайт перенаправляется на URL-адрес (ответ: 302). И в результате я снова получаю экран входа в систему.

Я получаю cookie следующим образом:

# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.

si.press.viasat.tv  FALSE   /press  FALSE   0   JSESSIONID  00FC3DCA4CFD806CDEBE2CAA7E999463

Любые идеи?


person M.V.    schedule 24.08.2011    source источник
comment
Он отлично работает для сайтов без ответа 302.   -  person M.V.    schedule 24.08.2011
comment
ты пробовал с curl_setopt($connection, CURLOPT_HEADER, false);   -  person diEcho    schedule 24.08.2011


Ответы (2)


Я пробовал другую логику (логика просмотра, и теперь она работает!)

$ch = curl_init();
$randnum = rand(1,5000);
curl_setopt($ch, CURLOPT_COOKIEJAR, "/tmp/cookiejar-$randnum");
curl_setopt($ch, CURLOPT_COOKIEFILE, "/tmp/cookiejar-$randnum");
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 0);


curl_setopt($ch, CURLOPT_URL,$URL);
$page = curl_exec($ch);

preg_match("/action=\"(.*)\"/", $page, $action);
preg_match("/signonForwardAction\" type=\"hidden\" value=\"(.*)\"/", $page, $signonFA);

$action = $action[1];
$signonFA = $signonFA[1];
$postData['signonForwardAction'] = $signonFA;


curl_setopt($ch, CURLOPT_URL,$URL.$action);
curl_setopt($ch, CURLOPT_REFERER, $URL);
curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type: application/x-www-form-urlencoded"));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,http_build_query($postData));
$page = curl_exec($ch);

Основная идея состоит в том, чтобы зайти на сайт, установить файлы cookie и отправить данные (должна быть строка, а не массив!) на сайт (получить с помощью $action), а затем продолжить сканирование сайта!

person M.V.    schedule 24.08.2011

попробуйте добавить ниже варианты

CURLOPT_FOLLOWLOCATION => TRUE,     // follow redirects         
CURLOPT_MAXREDIRS      => 10,       // stop after 10 redirects 

Справочник

person diEcho    schedule 24.08.2011