获取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和我通常遇到的其他选项的设置。我希望上面的例子对你有用。祝你好运。
是的,你必须保存饼干。为此,您可以在登录时创建一个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
选项。
Thanx的答复,但你能解释他们吗?你在做什么使用cookies.jar文件?我认为你正在为第二个脚本使用一些框架。是吗? – 2010-10-05 15:00:02
在第一篇文章中解释了一些信息,添加了一个简单易用的类。如果您有更多问题,请随时提问。通常有什么帮助,每次你抓取一个文件,以txt格式保存到硬盘中,并看看你得到了什么样的反应。 – 2010-10-06 17:14:38
非常感谢您的解释。我会马上尝试。 :) – 2010-10-06 18:00:52