Php 如何在脚本';他后来被处决了?
我有以下php代码,可以登录到受密码保护的页面并获取受保护的页面。脚本工作正常,但如果我想获取同一域中的另一个受保护页面,我只想使用登录功能一次 我想使用cookie文件打开下一个受保护的页面,而不是再次使用登录功能!换句话说,我只是想绕过登录步骤来抓取其他受保护的页面 有人能告诉我怎么做吗 注意:我的登录功能没有创建任何cookies,我没有在与脚本相同的文件夹中看到它!谁能告诉我为什么Php 如何在脚本';他后来被处决了?,php,session,cookies,curl,Php,Session,Cookies,Curl,我有以下php代码,可以登录到受密码保护的页面并获取受保护的页面。脚本工作正常,但如果我想获取同一域中的另一个受保护页面,我只想使用登录功能一次 我想使用cookie文件打开下一个受保护的页面,而不是再次使用登录功能!换句话说,我只是想绕过登录步骤来抓取其他受保护的页面 有人能告诉我怎么做吗 注意:我的登录功能没有创建任何cookies,我没有在与脚本相同的文件夹中看到它!谁能告诉我为什么 <? $ch=login(); $html=downloadUrl('ht
<?
$ch=login();
$html=downloadUrl('http://www.example.com/page1.asp', $ch);
////echo $html;
function downloadUrl($Url, $ch){
curl_setopt($ch, CURLOPT_URL, $Url);
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_REFERER, "http://www.google.com/");
curl_setopt($ch, CURLOPT_USERAGENT, "MozillaXYZ/1.0");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$output = curl_exec($ch);
return $output;
}
function login()
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/login.asp'); //login URL
curl_setopt ($ch, CURLOPT_POST, 1);
$post_array = array(
'txtUserName'=>'brad',
'txtPassword'=>'bradpassword',
);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $post_array);
curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$store = curl_exec ($ch);
return $ch;
}
?>
<html>
<br>
<textarea rows="30" cols="150"><?PHP print_r($html); ?></textarea>
</html>
使用
在第二个请求中,$cookieFileLocation是cookie文件的位置
你必须有2个请求。首先是填写cookie文件的登录请求
您必须检查您的cookie文件是否存在是否为\u文件($cookieFileLocation)
,如果存在,您可以绕过登录过程执行第二次请求下载受保护的内容
您应该注意,大多数系统都有会话过期时间,因此您必须在一段时间后登录。我会检查返回页面的html是否存在登录错误,作为我必须再次登录的标记。您需要第一次登录,然后在后续请求中引用cookie文件路径
function curlPost($url,$postData){
$ch= curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $postData,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_CONNECTTIMEOUT=>30,
CURLOPT_SSL_VERIFYPEER=>false,
CURLOPT_USERAGENT=>"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)",
CURLOPT_COOKIESESSION => true,
CURLOPT_COOKIEFILE => 'cookie.txt',
CURLOPT_COOKIEJAR => 'cookie.txt'
));
$output = curl_exec($ch);
curl_close( $ch );
return $output;
}
$postData = array(
'email' => 'aryan022@gmail.com',
'password' => 'aryan022',
'redirect_to' => 'http://localhost/cakephp/account '
);
$output=curlPost("http://localhost/cakephp/login",$postData);
/*use for subsequest request without passing all postData once login
$postData = array();
$output=curlPost("http://localhost/cakephp/account",$postData);
*/
echo $output;
那么,
cookie.txt
显示了什么呢?感谢回复。cookie.txt不会被创建在与php脚本相同的文件夹中!我甚至自己创造了它,但上面什么也没写!如果我手动登录到远程站点,它将在许多天内不再要求我输入密码!我想在多次执行这个php脚本时实现同样的效果!因为如果执行我当前的php代码,我不会得到受保护的页面,因为网站拒绝我,我的php脚本太快了!你看到这个了吗?只需将您已经登录的信息存储到变量中(如果后续请求在同一脚本中)我建议将其存储在数据库或文件中,这样您就不必每次运行脚本时都重新登录。bksi我应该如何在每次调用的biging中检查cookie,如果cookie存在,则绕过登录并使用该cookie获取受保护的页面?问题是cookie.txt永远不会被创建,不知道为什么!您应该使用绝对路径来创建cookie文件curloptu COOKIEFILE shows to curl在添加目录的Absult路径后,从目标cookie文件使用此cookie凭据现在cookie已创建。现在,如何检查cookie是否存在,如果它存在,只需使用它来获取受保护的页面并绕过登录?正如我所说,使用2个请求。检查您的文件是否存在。如果是,请使用不登录的请求
function curlPost($url,$postData){
$ch= curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $postData,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_CONNECTTIMEOUT=>30,
CURLOPT_SSL_VERIFYPEER=>false,
CURLOPT_USERAGENT=>"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)",
CURLOPT_COOKIESESSION => true,
CURLOPT_COOKIEFILE => 'cookie.txt',
CURLOPT_COOKIEJAR => 'cookie.txt'
));
$output = curl_exec($ch);
curl_close( $ch );
return $output;
}
$postData = array(
'email' => 'aryan022@gmail.com',
'password' => 'aryan022',
'redirect_to' => 'http://localhost/cakephp/account '
);
$output=curlPost("http://localhost/cakephp/login",$postData);
/*use for subsequest request without passing all postData once login
$postData = array();
$output=curlPost("http://localhost/cakephp/account",$postData);
*/
echo $output;