如何使用PHP / CURL通过POST登录站点

时间:2012-01-19 23:59:04

标签: php curl

我想自动登录网站。

想象一下,我有一个特定网站的用户用户名和密码。我想让他们轻松点击按钮,打开一个新窗口,然后通过CURL脚本将用户名/密码发布到页面中,然后允许重定向。

使用本教程,我认为发布了帖子:http://www.html-form-guide.com/php-form/php-form-submit.html

但我没有自动重定向到用户通常会定向到的页面。我还认为该网站需要使用cookie,因此不确定它们是否是以某种方式将cookie传递给客户端浏览器的策略。

2 个答案:

答案 0 :(得分:0)

http://www.php.net/manual/en/function.curl-setopt.php此处列出了所有可用的卷曲选项

也许我错了,但curl接受并保留cookie,直到curl资源没有被销毁(或cookie显式过期)

如果重定向不起作用,那可能是因为您尝试登录的页面,使用javascript重定向,或者某些< meta> tag:curl仅接受http响应指令的重定向(如header(“Location:....”);在php中)

因此您必须手动重定向自己调用目标网址!

希望这会有所帮助

答案 1 :(得分:0)

使用curl发送POST请求,打开响应输出(标题和全部)。这样,您就可以窃取PHPSESSID(或者任何sessionID)。然后将该cookie设置为用户计算机上的站点(如果可以,可能存在不确定的限制)。

public function login($email,$password){
$login=false;
$post='member[email]='.urlencode($email).'&member[password]='.urlencode($password)
. "&MAX_FILE_SIZE=50000000&dado_form_3=1";
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, 'http://your.login.info/here');
curl_setopt($ch,CURLOPT_USERAGENT,$this->useragent);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
//POST
curl_setopt($ch,CURLOPT_POST,4);
curl_setopt($ch,CURLOPT_POSTFIELDS,$post);

curl_setopt($ch, CURLOPT_HEADER, 1);
$output=curl_exec($ch);

//get cookies in map array
$rows=explode("\n",$output);
foreach($rows as $num=>$row){
$trim=substr($row,0,5);
$trim2=substr($row,0,29);
if ($trim2=="Location: /public/member/home")$login=true;
if ($trim=="Set-C") {$rownum=$num;}}
$cookies=$rows[$rownum];
$cookies=substr($cookies,12);/*RAW COOKIE*/
$cookies=explode("; ",$cookies);
$arr=array();
foreach ($cookies as $n=>$v){
$s=explode("=",$v);
$arr[$s[0]]=$s[1];}
$cookies=$arr;

$phpsessid=$cookies['PHPSESSID'];
curl_close($ch);
return $login;}//end isLoggedIn