Php CURL模拟登陆论坛并采集数据实例
程序员文章站
2022-05-06 19:58:09
...
要模拟浏览器访问网站,首选要学会观察浏览器是如何发送http报文的,以及网站服务器返回给浏览器 是什么样的内容,我推荐安装一个国外人开发的httpwatch的软件,最好搞个破解的版本,否则有些功能是使用不了的,这个软件安装完成之后是嵌入在 IE里的,启动Record,在地址栏输入网址后回车,它就会将浏览器和服务器之间的所有通讯扫描出来,让你一览无遗,关于这个软件的使用在本文不做介绍.
模拟浏览器登陆应用开发,最关键的地方是突破登陆验证,CURL技术不只支持http,还支持https,区别就在多了一层SSL加密传输,如果是要登陆 https网站,php记得要支持openssl,还是先拿一个例子来分析,代码如下:
/i', $contents, $matches); if (!emptyempty($matches)) { $formhash = $matches[1]; } else { die('Not found the forumhash.'); } //POST数据,获取COOKIE,cookie文件放在网站的temp目录下 $cookie_file = tempnam('./temp', 'cookie'); $ch = curl_init($login_url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); curl_exec($ch); curl_close($ch); //取到了关键的cookie文件就可以带着cookie文件去模拟发帖,fid为论坛的栏目ID $send_url = $discuz_url . "post.php?action=newthread&fid=2"; $ch = curl_init($send_url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); $contents = curl_exec($ch); curl_close($ch); //这里的hash码和登陆窗口的hash码的正则不太一样,这里的hidden多了一个id属性 preg_match('//i', $contents, $matches); if (!emptyempty($matches)) { $formhash = $matches[1]; } else { die('Not found the forumhash.'); } $post_data = array(); //帖子标题 $post_data['subject'] = 'test2'; //帖子内容 $post_data['message'] = 'test2'; $post_data['topicsubmit'] = "yes"; $post_data['extra'] = ''; //帖子标签 $post_data['tags'] = 'test'; //帖子的hash码,这个非常关键!假如缺少这个hash码,discuz会警告你来路的页面不正确 $post_data['formhash'] = $formhash; $ch = curl_init($send_url); curl_setopt($ch, CURLOPT_REFERER, $send_url); //伪装REFERER curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); $contents = curl_exec($ch); curl_close($ch); //清理cookie文件 unlink($cookie_file); ?>
CURL实现网站模拟登陆,代码如下:
上一篇: 请教哪种php框架最容易学
下一篇: 通用PHPExcel导出函数代码