php curl模拟登录 php模拟表单提交实例
本文导语: php curl模拟登录的方法 比如要登录百度的wap文库,链接是 http://wapwenku.baidu.com 点击“登录”链接,来到登录页面,如图 查看该页的html源码,找到它的登录表单: 代码示例: 用户名: 密码: 不使用自动登录 ...
php curl模拟登录的方法
比如要登录百度的wap文库,链接是 http://wapwenku.baidu.com
点击“登录”链接,来到登录页面,如图
查看该页的html源码,找到它的登录表单:
可以看出一些信息:
action=”http://wappass.baidu.com/passport/” method=”post”
这是登录信息提交的链接和方式。
所以我们程序中要做的事情,就是:把改表单中的所有input、select和textarea(如果有)的信息(包括隐藏的)用curl模拟表单的post方式提交给action中的那个连接就可以了实现登录了。
这里要提一点,很多网站的登录表单中的参数是变化的,比如这个表单中,我通过比较两次刷新的不同页面的源码,发现表单中有个hidden的input值是变化的。
就是这个
那么,这个uid的值就得用程序动态的获取。很简单,还是curl配合正则就可以获取,代码如下
获取表单中动态的隐藏值:
curl_setopt($ch, curlopt_url, "http://wappass.baidu.com/passport/");
curl_setopt($ch, curlopt_cookiejar, $this->cookie_jar);
curl_setopt($ch, curlopt_header,1);
curl_setopt($ch, curlopt_returntransfer, true);
curl_setopt($ch, curlopt_ssl_verifypeer, false);
curl_setopt($ch, curlopt_ssl_verifyhost, false);
$tmp = curl_exec($ch);
curl_close($ch);
preg_match("//i", $tmp, $temparr);
$uid = $temparr[1];
现在这个$uid 变量就获取到了本次抓取页面的表单中uid。
接下来该模拟提交表单了:
curl_setopt($ch, curlopt_url, "http://wappass.baidu.com/passport/");
curl_setopt($ch, curlopt_post, 1);
curl_setopt($ch, curlopt_postfields, "login_save=0&login=yes&can_input=0&u=http://wapwenku.baidu.com/&tpl=&tn=&pu=normal&ssid=normal&from=0&bd_page_type=1
&uid=".$uid."&login_username=".$username."&login_loginpass=".$password);
curl_setopt($ch, curlopt_cookiejar, $cookie_jar);
curl_setopt($ch, curlopt_header,1);
curl_setopt($ch, curlopt_returntransfer, true);
curl_setopt($ch, curlopt_ssl_verifypeer, false);
curl_setopt($ch, curlopt_ssl_verifyhost, false);
$str = curl_exec($ch);
curl_close($ch);
echo $str;exit;
//判断是否登录成功
if (strpos($str, "http/1.1 302 found") !== false)
{
$is_login = 1;
}
注意,$username和$password 是你的百度的用户名和密码,$cookie_jar是cookie保存路径。
以下是完整的登录百度的登录类实例。
代码说明:
测试过程中,曾把代码写在一个function里而没用类来封装,结果没有达到效果。
暂不清楚为什么出现这个种情况,建议最好把登录方法封装到类中。
>>> 更多有关php模拟登录的文章,请参考专题链接:php模拟登录 php curl模拟登录教程大全