下面的代码我有3个函数,当我运行example2网站时,它会进入我的网站,就像提供用户名和密码一样。示例2运行良好。但在example1网站中,当我执行这个程序时,它会进入我以前的页面,它应该不会受到用户名和密码的影响。在这两种情况下,我都得到了用户名&通过运行httpfox软件,将密码和其他数据作为$data变量。我认为,在示例2中,该软件显示了所有信息,如"username=YYYYY&密码=YYYYYYYYY&记住=是&submit=登录&action=do_login&url=http%3A%2F%2Fww.hackforums.net%2Findex.php&my_post_key=876890b33b8b9260ba3acfcc1998b1594',但在示例1中,它只显示,'用户名=XXXXX&密码=XXXXXXXXXXXXXXXXXXXXXX’有人知道答案吗?这将是一个很大的帮助!
另一个问题是,它不适用于任何"https"网站。你知道怎么做吗。非常感谢!
<html>
<body>
<?php
login("http://www.example1.com:9080/mrportal/loginaction", "username=XXXXX&password=XXXXXXXXXXXXXXXXXXXXX") ;
echo grabpage("http://www.example1.com:9080/mrportal/");
login("http://www.example2.net/member.php", "username=YYYYY&password=YYYYYYYYY&remember=yes&submit=Login&action=do_login&url=http%3A%2F%2Fwww.hackforums.net%2Findex.php&my_post_key=876890b33b8b9260ba3acfc1998b1594") ;
echo grabpage("http://www.example2.net)
function login($url, $data)
{
$fp = fopen("cookie.txt","w");
fclose($fp);
$login = curl_init();
curl_setopt($login, CURLOPT_COOKIEJAR,"cookie.txt");
curl_setopt($login, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt($login,CURLOPT_TIMEOUT,40000);
curl_setopt($login,CURLOPT_RETURNTRANSFER,true);
curl_setopt($login,CURLOPT_URL, $url);
curl_setopt($login,CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($login,CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($login,CURLOPT_POST, TRUE);
curl_setopt($login,CURLOPT_POSTFIELDS, $data);
ob_start();
return curl_exec($login);
ob_end_clean();
curl_close($login);
unset($login);
}
function grabpage($site)
{
$ch = curl_init();
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch,CURLOPT_TIMEOUT,400);
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt($ch,CURLOPT_URL, $site);
ob_start();
return curl_exec($ch);
ob_end_clean();
curl_close($ch);
}
function post_data($site, $data)
{
$datapost = curl_init();
$headers = array("Expect:");
curl_setopt($datapost,CURLOPT_URL, $site);
curl_setopt($datapost,CURLOPT_TIMEOUT,40000);
curl_setopt($datapost, CURLOPT_HEADER, TRUE);
curl_setopt($datapost, CURLOPT_HTTPHEADER, $headers);
curl_setopt($datapost,CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($datapost,CURLOPT_POST, TRUE);
curl_setopt($datapost,CURLOPT_POSTFIELDS, $data);
curl_setopt($datapost, CURLOPT_COOKIEFILE, "cookie.txt");
ob_start();
return curl_exec($datapost);
ob_end_clean();
curl_close($datapost);
unset($datapost);
}
?>
</body>
</html>
尝试使用:
curl_setopt($login, CURLOPT_SSL_VERIFYPEER, false);
在代码中跳过https地址的ssl验证。