获取phpBB远程会话

问题描述:

我想从我是phpBB论坛的成员中抓取一些数据。但为此,需要登录。我可以使用cURL登录,但如果我在使用cURL登录后尝试抓取数据,它仍然显示我需要在查看该页面之前登录。是否可以使用cURL登录并保留该会话以进行更远距离的工作?获取phpBB远程会话

另一件事,该论坛通常会在登录后显示确认页面,然后在5秒后自动重定向到索引页面。事情是,如果我使用cURL登录,我的脚本也会跟随该标题位置并向我显示该页面。

任何解决方法?

这就是平时对我的作品


$timeout=5; 
$file='cookies.jar'; 
$this->handle=curl_init(''); 
curl_setopt($this->handle, CURLOPT_COOKIEFILE, $file); 
curl_setopt($this->handle, CURLOPT_COOKIEJAR, $file); 
curl_setopt($this->handle, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($this->handle, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($this->handle, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($this->handle, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($this->handle, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6 (.NET CLR 3.5.30729)"); 
curl_setopt($this->handle, CURLOPT_TIMEOUT, round($timeout,0)); 
curl_setopt($this->handle, CURLOPT_CONNECTTIMEOUT, round($timeout,0)); 

和我一般使用这样


$now=grab_first_page(); 
if(not_logged_in($now)) { 
    send_login_info(); 
} 
if(not_logged_in()) { end_of_script_with_error(); } 
// rest of script 

这样的饼干保持跨会话和脚本没有登录每次它做了一些事情。

--- explian下面----使用

林的对象,但你可以替换$这个 - >用名为$ mycurl一个简单的变量处理,线条会像


$mycurl=curl_init('' 
curl_setopt($mycurl, CURLOPT_COOKIEFILE, $file)

下面的代码是: - 初始化“卷曲实例”(保持简单)(第3行) - 第4行和第5行:将cookie保存到文件。 Curl就像浏览器一样工作,所以当你使用curl登录到页面时,它会将cookies和认证数据保存在内存中。我告诉它将其保存到一个文件,以便第二次运行该脚本时,它将具有相同的cookie,并且不需要再次进行身份验证。或者你可以有多个脚本使用同一个cookie文件,只有一个用于登录,你每24小时运行一次或者每当你注销时... - 其他设置: * followlocation - 当curl收到http重定向时它应该返回页面就被重定向到,而不是重定向代码 *用户代理 - 卷曲呈现为火狐 *超时 - 它应该多少时间等待连接建立,5或10是绰绰有余通常

更多我已经把我在这里使用的一个简单的课程http://pastebin.com/Rfpc103X

你可以像这样使用



// -- initialize curl 
$ec=new easyCurl; 

// -- set some options 
//if the file you are in right now is named file_a.php it will create a file_a.jar cookie file 
$ec->start(str_replace('.php','.jar',__FILE__)); 
$ec->headersPrepare(false); 
$ec->prepareTimeOut(20); 

$url='http://www.google.com/'; 

// --- set url 
$ec->curlPrepare($url); 

// --- get the actual data 
$page=$ec->grab(); 

echo $page; 

// to send GET data 
$get_data=array('id'=>10); 
$ec->curlPrepare($url,$get_data); 

// and to post data 
$post_data=array('user'=>'blue','password'=>'black'); 
$ec->curlPrepare($url,array(),$post_data); 

它自动处理POST/GET和我通常遇到的其他选项的设置。我希望上面的例子对你有用。祝你好运。

+0

Thanx的答复,但你能解释他们吗?你在做什么使用cookies.jar文件?我认为你正在为第二个脚本使用一些框架。是吗? – 2010-10-05 15:00:02

+0

在第一篇文章中解释了一些信息,添加了一个简单易用的类。如果您有更多问题,请随时提问。通常有什么帮助,每次你抓取一个文件,以txt格式保存到硬盘中,并看看你得到了什么样的反应。 – 2010-10-06 17:14:38

+0

非常感谢您的解释。我会马上尝试。 :) – 2010-10-06 18:00:52

是的,你必须保存饼干。为此,您可以在登录时创建一个cookie jar,以便在您稍后访问论坛时重复使用。

curl --cookie-jar cjar -d "somelogindata" http://example.com/phpbb/login.php 

,创建一个cjar的cookie jar文件,然后您可以在后续请求重用:

curl --cookie-jar cjar --cookie cjar http://example.com/phpbb/viewforum.php?foobar 

--cookie-jar选项指定的cookie被保存在一个文件;要使用它们,请使用--cookie选项。要更新cookie,您应该始终提供--cookie-jar选项。