PHP支持的由Daniel Stenberg创建的libcurl库允许你与各种的服务器使用各种类型的协议进行连接和通讯。libcurl目前支持http、https、ftp、 gopher、telnet、dict、file和ldap协议。
libcurl同时也支持HTTPS认证、HTTP POST、HTTP PUT、 FTP 上传(这个也能通过PHP的FTP扩展完成)、HTTP 基于表单的上传、代理、cookies和用户名+密码的认证。
php的curl真的是相当好用,网上一搜索相关文章都是关于curl模拟登陆的,很少人提供模拟discuz发贴的源码。
本文原文地址为:php curl模拟登录discuz并模拟发帖
例子:
<?php $discuz_url = 'http://127.0.0.1/discuz/';//论坛地址 $login_url = $discuz_url .'logging.php?action=login';//登录页地址 $post_fields = array(); //以下两项不需要修改 $post_fields['loginfield'] = 'username'; $post_fields['loginsubmit'] = 'true'; //用户名和密码,必须填写 $post_fields['username'] = 'tianxin'; $post_fields['password'] = '111111'; //安全提问 $post_fields['questionid'] = 0; $post_fields['answer'] = ''; //@todo验证码 $post_fields['seccodeverify'] = ''; //获取表单FORMHASH $ch = curl_init($login_url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $contents = curl_exec($ch); curl_close($ch); preg_match('/<input\s*type="hidden"\s*name="formhash"\s*value="(.*?)"\s*\/>/i', $contents, $matches); if(!empty($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('/<input\s*type="hidden"\s*name="formhash"\s*id="formhash"\s*value="(.*?)"\s*\/>/i', $contents, $matches); if(!empty($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); ?>
更多有关php curl的文章,请参考:
curl获取网站的http的状态码
PHP添加CURL扩展库的二种方法
linux curl监控网页的shell脚本
php CURL模拟cookie登录的代码
PHP CURL获取cookies模拟登录的方法介绍
php curl上传文件
php curl应用实例
PHP中用CURL伪造IP来源的方法
php curl判断远程文件是否存在
php curl伪造IP来源
php curl 学习总结
相关推荐
PHPcurl模拟登陆教务系统源码,这里以武汉理工大学教务系统为例,可以自己在此基础上研究其他教务系统。
php curl 模块模拟登陆
使用CURL进行模拟登陆,在一些自动化场景中,相关脚本部署在Linux上,并且是命令行的操作方式,模拟页面的操作基本无法实现,本例使用curl模拟http请求,实现浏览器操作
PHP100视频教程88:PHP.之.CURL模拟登陆并获取数据.rar
curl模拟登陆rsa加密事例
该资源通过具体实例模拟页面登录。curl使用基本过程:第一步:使用curl_init()进行初始化,第二步:使用curl_setopt()函数进行设置选项,第三步:使用curl_exec($curl)进行执行事务,第四步:curl_close()...
php的curl真的是相当好用,网上一搜索相关文章都是关于curl模拟登陆的,很少人提供模拟discuz发贴的源码。 复制代码 代码如下: <?php $discuz_url = ‘http://127.0.0.1/discuz/’;//论坛地址 $login_url = $...
php使用curl模拟用户IP地址,与模拟访问浏览器信息,请求代码
这是一个经典的curl模拟多线程操作,缺点是总耗费时间取决于最慢的一个响应,网上有很多,只是用代码实现了一下,这是一个获取搜狗rank的示例
php curl 自动微博登陆,使用curl,
php curl模仿form表单提交图片或文件 用的tp5做的例子
这个curl文件提供vget,vpost,vlogin,可以模拟http&https等绝大部分的请求,功能强大
PHP - cURL实现短信验证码注册登录完整示例:PHP - cURL.php和附件说明,RAR压缩包
bool curl_setopt (int ch, string option, mixed value) curl_setopt()函数将为一个CURL会话设置选项。option参数是你想要的设置,value是这个选项给定的值。 下列选项的值将被作为长整形使用(在option参数中指定)...
curl模拟post跨域提交数据 包括cookie,agent
本文章来给各位同学介绍一下关于Php CURL模拟登陆论坛并采集数据实例,如果你对利用curl模拟登录功能有兴趣可进入参考。
php_curl_使用实例 curl的使用方法 curl 模拟post提交 curl 设置 UA、cookie 等 都有纤细例子
主要介绍了PHP基于curl模拟post提交json数据操作,结合实例形式分析了php使用curl实现post方式提交json数据相关操作步骤与注意事项,代码简单实用,需要的朋友可以参考下
PHP cURL实现模拟登录与采集使用方法详解教程 PDF
PHP CURL 模拟提交(支持代理),一个封装好的功能能类,直接调用就好了