snoopy模拟登陆后采集https开头的aspx页面[转]
阅读前请看Snoopy+Https的配置文章:让Snoopy也支持HTTPS的解决办法
snoopy采集https,会调用curl模块,因为要确保安装了该模块,并且指明了路径。(snoopy默认指定的就是正确的)
构建一个表单提交
asp的站点会有些隐含的参数,要从页面中全部扣出来。
[php]$submit_url = "https://www.example.com/login.aspx";//提交页面
$formvars["DropDownList1"] = "zh-CN";
$formvars["txtAccount"] = "11111";
$formvars["txtPassword"] = "111111";
$formvars["txtLoginCode"] = $_GET[‘a’]; //填写验证码
$formvars["Button1"] = "";
$formvars["__EVENTTARGET"] = "";
$formvars["__EVENTARGUMENT"] = "";
$formvars["__LASTFOCUS"] = "";
$formvars["__VIEWSTATE"] = "/wEPDffUKFgICAg8QZGQWAQGS/KEtAfsT5lfgRPVAoWIJarrT2zA==";
$sp = new Snoopy;
$sp->cookies["ASP.NET_SessionId"] = $_GET[‘s’]; //设置sessionID的cookie
$sp->submit($submit_url,$formvars);
var_dump($sp->results);//获取表单提交后的 返回的结果
if( !empty($sp->error)) { //如果有错误,返回错误
var_dump($sp->error);
}
[/php]
返回的信息是 Object Moved To Here;直接无视。
这时候已经登陆了,可以对要获取的页面进行采集。
[php]$geturl = ‘http://www.example.com/product/content.aspx’;
$sp->fetch($geturl);
if ($sp->status != 200) {
echo ‘no get status: ‘.$sp->status.'<br/>’;
} else {
$file_contents = $sp->results;
echo ‘get content:<br/>’;
echo $file_contents;
echo ‘<br/>’;
}
[/php]
如果你是在window环境下使用snoopy,curl会有问题,采集不到所要的内容。
建议在linux环境下进行。
你也可以用该登陆模块来实现通过程序发帖的功能,不过每次的验证码和sessionid都要自己手动填写。
曾经想过,存在cookie中的sessionid能不能通过程序读取,发现没办法跨域读取cookie。因此ff下,只能借助firebug
来查看,ie下借助httpwatch查看..
本文转自:http://hi.baidu.com/bngoogle/blog/item/1d2190103647726acb80c45a.html