项目需求:

每天定时访问一次网站的某个网页,而且这个网页是需要登录才能够访问。

解决思路(linux系统):

解决其实很简单,只要每天定时用浏览器登录,然后访问就可以了。但是,这种做法是不现实的。我们可以利用 linux 的定时器(crontab) 来实现定时访问功能,然后用 PHP CURL 来模拟浏览器登录和访问。

  • 首先,在系统设置定时任务。定时执行某个 php 文件,如 timer.php

  • 在这个 php 文件中会实现两个功能,先登录,获取登录信息的 cookie,然后访问指定的网页。


/** * 先登录(登录需要获取 token) */ // 创建临时存放 cookie 的文件 $cookie_file = tempnam('./temp', 'cookie'); $login_url = 'http://..'; $ch = curl_init($login_url); // 是否将头文件的信息作为数据流输出 curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_POST, 1); // 先获取 token,已在登录页面设置好 curl_setopt($ch, CURLOPT_POST, array('curl_token' => 'curl_token')); $token = curl_exec($ch); // 登录 curl_setopt($ch, CURLOPT_POST, array( 'submit' => '登录', 'token' => $token, 'username' => 'xxx', 'password' => 'xxx', )); // 连接结束后,比如,调用 curl_close 后,保存 cookie 信息 curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); // 再次连接,这次是登录 curl_exec($ch); curl_close($ch); /** * 利用登录获取的登录 cookie,访问页面 */ $url = 'http://...'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); // 模拟登录状态的 cookie curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); curl_exec($ch); curl_close($ch);