博主辛苦了,我要打赏银两给博主,犒劳犒劳站长。
【摘要】cURL 是一个功能强大的PHP库,使用PHP的cURL库可以简单和有效地抓取网页并采集内容,设置cookie完成模拟登录网页,curl提供了丰富的函数,开发者可以从PHP手册中获取更多关于cURL信息。本文以模拟登录开源中国手机端(oschina)为例,和大家分享cURL的使用。
PHP的curl()在抓取网页的效率方面是比较高的,而且支持多线程,而file_get_contents()效率就要稍低些,当然,使用curl时需要开启下curl扩展。
本文所有源代码(直接复制粘贴,并修改登录密码即可):
// 模拟登录
function login_post($url, $cookie, $post)
{
$curl = curl_init();// 初始化curl模块
curl_setopt($curl, CURLOPT_URL, $url);// 登录提交的地址
curl_setopt($curl, CURLOPT_HEADER, 0);// 是否显示头信息
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 0);// 是否自动显示返回的信息
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie); // 设置Cookie信息保存在指定的文件中
curl_setopt($curl, CURLOPT_POST, 1);// post方式提交
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));// 要提交的信息
curl_exec($curl);// 执行cURL
curl_close($curl);// 关闭cURL资源,并且释放系统资源
}
// 登录成功后获取数据
function get_content($url, $cookie)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); // 读取cookie
$rs = curl_exec($ch); // 执行cURL抓取页面内容
curl_close($ch);
return $rs;
}
// 设置post的数据
$post = array (
'email' => '[email protected]',
'pwd' => '****',
'goto_page' => '/my',
'error_page' => '/login',
'save_login' => '1',
'submit' => '现在登录'
);
// 登录地址
$url = "http://m.oschina.net/action/user/login";
// 设置cookie保存路径
$cookie = dirname(__FILE__) . '/cookie_oschina.txt';
// 模拟登录
login_post($url, $cookie, $post);
// 登录后要获取信息的地址
$url2 = "http://m.oschina.net/my";
// 获取登录页的信息
$content = get_content($url2, $cookie);
// 删除cookie文件
@unlink($cookie);
// 匹配页面信息
echo $content;
执行结果:
函数 login_post() 首先初始化 curl_init() ,然后使用 curl_setopt() 设置相关选项信息,包括要提交的 url 地址,保存的 cookie 文件, post 的数据(用户名和密码等信息),是否返回信息等等,然后 curl_exec 执行 curl ,最后 curl_close() 释放资源。注意PHP自带的 http_build_query()
可以将数组转换成相连接的字符串。
版权归 马富天PHP博客 所有
本文标题:《PHP 模拟登录》
本文链接地址:http://www.mafutian.net/216.html
转载请务必注明出处,小生将不胜感激,谢谢! 喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^
顶0
踩0
第 3 楼 浙江经济理事会 2016-10-11 10:06:24 江苏苏州
第 2 楼 天下彩 2016-10-08 16:04:48 加利福尼亚San Francisco
第 1 楼 天下彩 2016-10-08 16:04:30 加利福尼亚San Francisco
评论审核未开启 |