• 使用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;
  • 相关阅读:
    在SharePoint中实现Workflow(2):创建一个Workflow
    pku1384PiggyBank(动态规划)
    pku1088滑雪(记忆性搜索)
    hdu1251统计难题(初次接触字典树)
    详细解说 STL 排序(Sort)
    pku1631Bridging signals(动态规划题+二分搜索)
    pku1157LITTLE SHOP OF FLOWERS(简单动态规划题:摆放鲜花使审美价值达到最高)
    pku1067取石子游戏(博弈)
    pku2524Ubiquitous Religions(初次接触并查集)
    pku1050To the Max(求矩阵的最大子段和)
  • 原文地址:https://www.cnblogs.com/myon/p/6387640.html
Copyright © 2020-2023  润新知