使用cURL登录后获取远程文件内容

时间:2011-07-07 04:58:40

标签: php curl

正如标题所示,我试图在需要登录的网站上取回(几个)页面的内容。这是一个合法的登录,我可以访问内容 - 没有任何阴影正在进行。

我搜索过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如果有任何其他信息会有所帮助。

1 个答案:

答案 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;

More details