当前位置:首页 > PHP教程 > php应用 > 列表

php通过curl模拟登陆DZ论坛

发布:smiling 来源: PHP粉丝网  添加日期:2021-05-26 15:47:36 浏览: 评论:0 

本文章来给各位同学介绍一下关于Php CURL模拟登陆论坛并采集数据实例,如果你对利用curl模拟登录功能有兴趣可进入参考。

libcurl同时也支持HTTPS认证、HTTP POST、HTTP PUT、 FTP 上传(这个也能通过PHP的FTP扩展完成)、HTTP 基于表单的上传、代理、cookies和用户名+密码的认证。

  1. <?php  
  2. $discuz_url = 'https://www.phpfensi.com/';//论坛地址  
  3. $login_url = $discuz_url .'login.php?action=login';//登录页地址  
  4.    
  5. $post_fields = array();  
  6. //以下两项不需要修改  
  7. $post_fields['loginfield'] = 'username';  
  8. $post_fields['loginsubmit'] = 'true';  
  9. //用户名和密码,必须填写  
  10. $post_fields['username'] = 'tianxin';  
  11. $post_fields['password'] = '111111';  
  12. //安全提问  
  13. $post_fields['questionid'] = 0;  
  14. $post_fields['answer'] = '';  
  15. //@todo验证码  
  16. $post_fields['seccodeverify'] = '';  
  17. //获取表单FORMHASH  
  18. $ch = curl_init($login_url);  
  19. curl_setopt($ch, CURLOPT_HEADER, 0);  
  20. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
  21. $contents = curl_exec($ch);  
  22. curl_close($ch);  
  23. preg_match('/<input\s*type="hidden"\s*name="formhash"\s*value="(.*?)"\s*\/>/i'$contents$matches);  
  24. if(!emptyempty($matches)) {  
  25. $formhash = $matches[1];  
  26. else {  
  27. die('Not found the forumhash.');  
  28. }  
  29.    
  30. //POST数据,获取COOKIE,cookie文件放在网站的temp目录下  
  31. $cookie_file = tempnam('./temp','cookie');  
  32. $ch = curl_init($login_url);  
  33. curl_setopt($ch, CURLOPT_HEADER, 0);  
  34. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
  35. curl_setopt($ch, CURLOPT_POST, 1);  
  36. curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);  
  37. curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);  
  38. curl_exec($ch);  
  39. curl_close($ch);  
  40. //取到了关键的cookie文件就可以带着cookie文件去模拟发帖,fid为论坛的栏目ID  
  41. $send_url = $discuz_url."post.php?action=newthread&fid=2";  
  42.    
  43. $ch = curl_init($send_url);  
  44. curl_setopt($ch, CURLOPT_HEADER, 0);  
  45. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
  46. curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);  
  47. $contents = curl_exec($ch);  
  48. curl_close($ch);  
  49. //这里的hash码和登陆窗口的hash码的正则不太一样,这里的hidden多了一个id属性  
  50. preg_match('/<input\s*type="hidden"\s*name="formhash"\s*id="formhash"\s*value="(.*?)"\s*\/>/i'$contents$matches);  
  51. if(!emptyempty($matches)) {  
  52. $formhash = $matches[1];  
  53. else {  
  54. die('Not found the forumhash.');  
  55. }  
  56.    
  57. $post_data = array();  
  58. //帖子标题  
  59. $post_data['subject'] = 'test2';  
  60. //帖子内容  
  61. $post_data['message'] = 'test2';  
  62. $post_data['topicsubmit'] = "yes";  
  63. $post_data['extra'] = '';  
  64. //帖子标签  
  65. $post_data['tags'] = 'test';  
  66. //帖子的hash码,这个非常关键!假如缺少这个hash码,discuz会警告你来路的页面不正确  
  67. $post_data['formhash']=$formhash;  
  68.    
  69. $ch = curl_init($send_url);  
  70. curl_setopt($ch, CURLOPT_REFERER, $send_url); //伪装REFERER  
  71. curl_setopt($ch, CURLOPT_HEADER, 0);  
  72. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);  
  73. curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);  
  74. curl_setopt($ch, CURLOPT_POST, 1);  
  75. curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);  
  76. $contents = curl_exec($ch);  
  77. curl_close($ch);  
  78. //清理cookie文件  
  79. unlink($cookie_file);  
  80. ?>

Tags: curl模拟登陆DZ

分享到: