2010-12-30 3 views
0

Я хочу, чтобы loginto сайт с помощью curl, а затем получить итоговую страницу. например, я хочу запустить сценарий и посмотреть мою почтовую страницу yahoo. Я написал что-то вроде этого.Войдите в сайт, используя curl

//set POST variables 
$url = 'http://localhost/test/login'; 
$fields = array(
         'username'=>'abc', 
         'password'=>'def' 
       ); 
$fields_string=''; 
//url-ify the data for the POST 
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; } 
rtrim($fields_string,'&'); 

//open connection 
$ch = curl_init(); 

//set the url, number of POST vars, POST data 
curl_setopt($ch,CURLOPT_URL,$url); 
curl_setopt($ch,CURLOPT_POST,count($fields)); 
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string); 

//execute post 
$result = curl_exec($ch); 

//close connection 
curl_close($ch); 
echo $result; 

login.php

echo $_POST['username']; 
echo $_POST['password']; 

header('Location: http://www.xyz.com/'); 

сообщений сценария данные в login.php, но содержание xyz.com не показаны.

+1

Что это связано с рекурсией? – BoltClock

ответ

1

Зайдя на веб-сайт вы нормально генерировать идентификатор сеанса, который хранится в сессии. Войдя в систему с CURL, вы не сохранили этот файл cookie в своем браузере клиента, возможно, вы вошли в систему с вашим сервером, но вы не можете войти в систему с вашим клиентом.

И, конечно, изменить эту строку:

echo $_POST['username']; 
echo $_POST['password']; 

header('Location: http://www.xyz.com/'); 

на следующее:

header('Location: http://www.xyz.com/'); 
echo $_POST['username']; 
echo $_POST['password']; 

или использовать ob_start(); в начале вашего скрипта.

... который не имеет смысла, потому что вы никогда не увидите этот контент;)

1

Ваша проблема заключается в двух вызовах echo перед вызовом header.

Согласно документации header необходимо вызвать до отправки любого другого выхода.

http://php.net/manual/en/function.header.php