php post登陆,PHP模拟post登陆

为了做一个集成校园网功能的站点,需要模拟登陆到校园网获取信息,php用来模拟提交post信息还是比较简洁的。把一下重要的代码记录在这里。

/** * 模拟post进行url请求 * @param string $url * @param string $param */ function request_post($url = ”, $param = ”) { if (empty($url) || empty($param)) { return false; }

$postUrl = $url; $curlPost = $param; $ch = curl_init();//初始化curl curl_setopt($ch, CURLOPT_URL,$postUrl);//抓取指定网页 curl_setopt($ch, CURLOPT_HEADER, 0);//设置header curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上 curl_setopt($ch, CURLOPT_POST, 1);//post提交方式 curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost); $data = curl_exec($ch);//运行curl curl_close($ch);

return $data; }

这是方法,

下面是具体的调用案例。

function testAction(){ $url = ‘http://mobile.jschina.com.cn/jschina/register.php‘; $post_data[‘appid’]       = ’10’; $post_data[‘appkey’]      = ‘cmbohpffXVR03nIpkkQXaAA1Vf5nO4nQ’; $post_data[‘member_name’] = ‘zsjs123’; $post_data[‘password’]    = ‘123456’; $post_data[’email’]    = ‘zsjs123@126.com’; $o = “”; foreach ( $post_data as $k => $v ) { $o.= “$k=” . urlencode( $v ). “&” ; } $post_data = substr($o,0,-1);

$res = $this->request_post($url, $post_data); print_r($res);

}

这样就提交请求,并且获取请求结果了。一般返回的结果是json格式的。

这里的post是拼接出来的。

也可以改造成下面的方式。

/** * 模拟post进行url请求 * @param string $url * @param array $post_data */ function request_post($url = ”, $post_data = array()) { if (empty($url) || empty($post_data)) { return false; }

$o = “”; foreach ( $post_data as $k => $v ) { $o.= “$k=” . urlencode( $v ). “&” ; } $post_data = substr($o,0,-1);

$postUrl = $url; $curlPost = $post_data; $ch = curl_init();//初始化curl curl_setopt($ch, CURLOPT_URL,$postUrl);//抓取指定网页 curl_setopt($ch, CURLOPT_HEADER, 0);//设置header curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上 curl_setopt($ch, CURLOPT_POST, 1);//post提交方式 curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost); $data = curl_exec($ch);//运行curl curl_close($ch);

return $data; }

将拼接也封装了起来,这样调用的时候就更简洁了。

function testAction(){ $url = ‘http://mobile.jschina.com.cn/jschina/register.php‘; $post_data[‘appid’]       = ’10’; $post_data[‘appkey’]      = ‘cmbohpffXVR03nIpkkQXaAA1Vf5nO4nQ’; $post_data[‘member_name’] = ‘zsjs124’; $post_data[‘password’]    = ‘123456’; $post_data[’email’]    = ‘zsjs124@126.com’; //$post_data = array(); $res = $this->request_post($url, $post_data); print_r($res);

}

第二种:应用curl库的方式

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资源,并且释放系统资源

}

函数login_post()首先初始化curl_init(),然后使用curl_setopt()设置相关选项信息,包括要提交的url地址,保存的cookie文件,post的数据(用户名和密码等信息),是否返回信息等等,然后curl_exec执行curl,最后curl_close()释放资源。注意PHP自带的http_build_query()可以将数组转换成相连接的字符串。

接下来如果登录成功后,我们要获取登录成功后的页面信息。

//登录成功后获取数据

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;

}

函数get_content()中也是先初始化curl,然后设置相关选项,执行curl,释放资源。其中我们设置CURLOPT_RETURNTRANSFER为1即自动返回信息,而CURLOPT_COOKIEFILE可以读取到登录时保存的cookie信息,最后将页面内容返回。

我们的最终目的是要获取到模拟登录后的信息,也就是只有正常登录成功后才能获取的有用信息。接下来我们以登录开源中国的移动版为例,看看如何抓取到登录成功后的信息。

//设置post的数据

$post = array (

’email’ => ‘oschina账户’,

‘pwd’ => ‘oschina密码’,

‘goto_page’ => ‘/my’,

‘error_page’ => ‘/login’,

‘save_login’ => ‘1’,

‘submit’ => ‘现在登录’

);

//登录地址

//设置cookie保存路径

$cookie = dirname(__FILE__) . ‘/cookie_oschina.txt’;

//登录后要获取信息的地址

//模拟登录

login_post($url, $cookie, $post);

//获取登录页的信息

$content = get_content($url2, $cookie);

//删除cookie文件

@ unlink($cookie);

//匹配页面信息

$preg = “/

(.*)/i”;

preg_match_all($preg, $content, $arr);

$str = $arr[1][0];

//输出内容

echo $str;

运行上述代码后,我们会看到最终获取到登录用户的头像图片。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值