使用curl登录网站

时间:2010-12-30 14:05:58

标签: php curl

我想使用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的内容。

2 个答案:

答案 0 :(得分:1)

您的问题是在致电echo之前的两次header来电。

根据文档header必须在发送任何其他输出之前调用。

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

答案 1 :(得分:1)

通过登录网站,您可以正常生成存储在会话中的会话ID。通过使用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();在你的剧本的开头。

...因为你永远不会看到那些内容所以没有意义;)