zoukankan      html  css  js  c++  java
  • 使用CURL进行模拟登录

    在信息采集的时候,要采集的站点可能需要登录,这样使用简单的采集方式(例如file_get_contents)就无法做到了,我们可以利用PHP的CURL扩展库来进行模拟登录,下面给出代码示例:

    1. <?php
    2. $cookie_path = './'; //设置cookie保存路径
    3.  
    4. //-----登录要提交的表单数据---------------
    5. $vars['username'] = '张三';
    6. $vars['pwd'] = '123';
    7. //-------------------------------------
    8. $method_post = true;
    9. //登录提交的url地址(表单中的action的绝对地址)
    10. $url = 'http://****.com/login';
    11. //----------------------------
    12.  
    13. $ch = curl_init();
    14. $params[CURLOPT_URL] = $url; //请求url地址
    15. $params[CURLOPT_HEADER] = true; //是否返回响应头信息
    16. $params[CURLOPT_RETURNTRANSFER] = true; //是否将结果返回
    17. $params[CURLOPT_FOLLOWLOCATION] = true; //是否重定向
    18. $params[CURLOPT_USERAGENT] = 'Mozilla/5.0 (Windows NT 5.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1';

    19. $postfields = '';
    20. foreach ($vars as $key => $value){
    21. $postfields .= urlencode($key) . '=' . urlencode($value) . '&';
    22. }

    23. $params[CURLOPT_POST] = true;
    24. $params[CURLOPT_POSTFIELDS] = $postfields;

    25. //判断是否有cookie,有的话直接使用
    26. if (isset($_COOKIE['cookie_jar']) && ($_COOKIE['cookie_jar'] || is_file($_COOKIE['cookie_jar'])))
    27. {
    28. $params[CURLOPT_COOKIEFILE] = $_COOKIE['cookie_jar']; //这里判断cookie
    29. }
    30. else
    31. {
    32. $cookie_jar = tempnam($cookie_path, 'cookie'); //产生一个cookie文件
    33. $params[CURLOPT_COOKIEJAR] = $cookie_jar; //写入cookie信息
    34. setcookie('cookie_jar', $cookie_jar); //保存cookie路径
    35. }
    36. curl_setopt_array($ch, $params); //传入curl参数
    37. $content = curl_exec($ch); //执行
    38.  
    39. echo '
    40. ';
    41. echo $content; //输出登录结果
    42. /*
    43.  *如果输出的结果是Json格式则用下面方法得到所需内容
    44.  *$obj = json_decode($content);
    45.  *print_r($obj->{'所需内容'}) ;
    46.  */
    47. /*
    48. //---------登录成功后再次请求其他地址,如果有多个可以循环执行---------
    49. echo '
    50. ';
    51. $nexturl = 'http://****.com/test';
    52. $params[CURLOPT_URL] = $nexturl;
    53. $params[CURLOPT_POSTFIELDS] = '';
    54. curl_setopt_array($ch, $params); //传入curl参数
    55. $content = curl_exec($ch); //执行
    56. echo $content; //输出请求结果
    57. //-------------------------------------------------
    58.  
    59. */
    60. curl_close($ch); //关闭连接

    61. ?>

    注:如果遇到无法请求https站点的情况,可能是因为无法验证证书或者域名,只要在curl_setopt_array前增加以下两项就可以了:

      1. $params[CURLOPT_SSL_VERIFYPEER] = false;
      2. $params[CURLOPT_SSL_VERIFYHOST] = false;
  • 相关阅读:
    Android变化如何破解几场金
    mysql 在创建批处理脚本日志表信息
    近期感悟要多说多想多做
    Spring使用小结2
    structs2使用小结2
    2013第50周五打包
    2013第50周四开发记
    jquery使用总结
    2013第50周三开发记
    eclipse编辑工具小结
  • 原文地址:https://www.cnblogs.com/myon/p/6387640.html
Copyright © 2011-2022 走看看