正如标题所示,我试图在需要登录的网站上取回(几个)页面的内容。这是一个合法的登录,我可以访问内容 - 没有任何阴影正在进行。
我搜索过SO并发现有几张海报尝试了同样的事情 - 我发现的任何内容都没有帮助解决这个问题。
我尝试了几种变体 - 添加各种选项,如FOLLOWLOCATION(设置为true,然后尝试设置为false);增加超时;同时设置COOKIEJAR和COOKIEFILE;在登录后调用curl_close,然后在加载目标文件之前调用一个新的curl_init;使用传统的PHP方法来获取文件(file_get_contents等);显式创建cookie文件并将其设置为可写;尝试使用和不使用REFERER;尝试更换REFERER;尝试了http和https协议;尝试先调用curl_close强制写入cookie,然后立即再次运行脚本块;等等......没有运气。
下面是正在使用的代码的快照(现在只是尝试获取一个文件)。
任何建议都将不胜感激。
$e = curl_init();
curl_setopt($e, CURLOPT_URL, 'https://www.some-site.com/login.php');
curl_setopt($e, CURLOPT_POST, 1);
curl_setopt($e, CURLOPT_POSTFIELDS, 'username=bob&password=1234');
curl_setopt($e, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($e, CURLOPT_REFERER, 'https://www.some-site.com');
curl_setopt($e, CURLOPT_RETURNTRANSFER, 1);
curl_exec($e);
curl_setopt($e, CURLOPT_URL, 'https://www.some-site.com/posts.php?id=1');
$content = curl_exec($e);
print htmlentities($content);
curl_close($e);
没有实际错误 - cURL正常运行,但$ content设置为“您尚未登录...请立即登录...”页面。
通过浏览器(Fx,Chrome,Safari,IE)登录后,每个帖子都可以访问(再次通过浏览器)而不会出现问题。
我很难过。
TYIA任何建议 - LMK如果有任何其他信息会有所帮助。
答案 0 :(得分:2)
这是我在登录网站后用来获取网页内容的。
$login_url = 'http://www.examplesite.com/php/login.php';
//These are the post data username and password
$post_data = 'loginuser=smith&loginpass=sh20147';
//Create a curl object
$ch = curl_init();
//Set the useragent
$agent = $_SERVER["HTTP_USER_AGENT"];
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
//Set the URL
curl_setopt($ch, CURLOPT_URL, $login_url );
//This is a POST query
curl_setopt($ch, CURLOPT_POST, 1 );
//Set the post data
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
//We want the content after the query
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//Follow Location redirects
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
/*
Set the cookie storing files
Cookie files are necessary since we are logging and session data needs to be saved
*/
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
//Execute the action to login
$postResult = curl_exec($ch);
print_r($postResult);
记录后,现在获取已记录的页面或特定页面内容,如下所示。
$url = 'http://www.examplesite.com/members/home.php';
curl_setopt_array(
$ch, array(
CURLOPT_URL => $url ,
CURLOPT_RETURNTRANSFER => true
));
$output = curl_exec($ch);
echo $output;