打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
PHP curl获取验证码并登录网站
userphoto

2017.02.03

关注

PHP curl获取验证码并登录网站-实现登录抓取、采集内容

嗨豆壳技术文章 时间:2015-03-27 14:11:34 [ray]

在抓取需要用户登录的数据时,常使用到curl函数,本文给大家分享利用 php curl() 函数实现登录并抓取数据,curl在抓取网页的效率方面是比较高的,而且支持多线程。

平时使用 file_get_contents() 函数比较快捷,但效率就要稍低些,另外,使用curl函数时需要开启curl扩展。

  1. <?php
  2. //error_reporting(0);
  3. $cookieVerify = dirname(__FILE__)."/verify.tmp";
  4. $cookieSuccess = dirname(__FILE__)."/1769.tmp";
  5. if(!$_POST){
  6. // 获取cookie并保存
  7. $ch = curl_init();
  8. curl_setopt($ch, CURLOPT_URL, "http://www.1769pt.com/userlogin.html");
  9. curl_setopt($ch, CURLOPT_HEADER, 0);
  10. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  11. curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieVerify);
  12. $rs = curl_exec($ch);
  13. curl_close($ch);
  14.  
  15. // 带上cookie抓取验证码,必须带上cookie,否则验证码不对应
  16. $ch = curl_init();
  17. curl_setopt($ch, CURLOPT_URL, "http://www.1769pt.com/include/getcode.php");
  18. curl_setopt($ch, CURLOPT_HEADER, 0);
  19. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  20. curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieVerify);
  21. $rs = curl_exec($ch);
  22. // 把验证码在本地生成,二次拉取验证码可能无法通过验证
  23. @file_put_contents("verify.jpg",$rs);
  24. curl_close($ch);
  25. // 手工验证码表单
  26. echo "<form action=\"\" method=\"post\"><input type=\"text\" name=\"vcode\"><img src=\"verify.jpg\" /><br><input type=\"submit\" value=\"ok\"></form>";
  27. }else{
  28. // 登录
  29. $ch = curl_init();
  30. // 用户名\密码
  31. $user = "abc123";
  32. $pass = "123456";
  33. $verify = $_POST["vcode"];
  34. $url = "http://www.1769pt.com/userlogin.php?action=login";
  35.  
  36. // 返回结果存放在变量中,不输出
  37. curl_setopt($ch, CURLOPT_URL, $url);
  38. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  39. curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieVerify);
  40. curl_setopt($ch, CURLOPT_HEADER, 1);
  41. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120);
  42. curl_setopt($ch, CURLOPT_POST, true);
  43. $fields_post = array("username"=> $user, "userpwd"=> $pass, "logintype"=>1,"vcode"=>$verify);
  44. $headers_login = array("User-Agent" => "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36");
  45. $fields_string = "";
  46. foreach($fields_post as $key => $value){
  47. $fields_string .= $key . "=" . $value . "&";
  48. }
  49. $fields_string = rtrim($fields_string , "&");
  50. curl_setopt($ch, CURLOPT_HTTPHEADER, $headers_login);
  51. curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieSuccess);
  52. curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
  53. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  54. $result= curl_exec($ch);
  55. curl_close($ch);
  56. // 登录成功,查看1769.tmp cookie文件有相应用户名等信息
  57. }
  58. ?>

声明:本代码仅用于测试学习,请勿用作非法用途。

标签

本文地址:https://www.hi-docs.com/article/detail-MTI4.html

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
php curl实现get和post的代码
php以post形式发送xml的方法
PHP单一登录使用NTLMv2
【新提醒】封装CURL扩展php分享
利用 PHP 和 Follow5 同步腾讯微博 | SimonLeung's Blog
php执行https接口get的方式
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服