最近公司網站需要在后台定時請求和更新數據,但PHP畢竟是一種后端語言,不能自動運行,所以整理了幾個方法。
1、在前端定時請求頁面。
2、使用批處理。
3、使用windows計划任務。
第一種方案必須要打開瀏覽器,如果關閉了瀏覽器,可能就會出問題,而且瀏覽器一直處於打開狀態,有點浪費資源。
第二種方案比較簡單,直接調用瀏覽器打開頁面就行,但是得不到回調值。
所以我打算使用powershell配合計划任務來完成這個工作。
我們可以使用win+R,然后輸入powershell,然后回車來打開ps,不過此方法得不到管理員的權限(在win10下將不能寫入文件到C盤),但不影響下面的命令執行。
我使用了一個Invoke-WebRequest命令來執行web request,此命令的詳細用法請輸入Get-Help Invoke-WebRequest來查看,或者查閱MSDN。
簡單用法如下,需要一個Uri的開關,傳一個請求地址,像這樣:
1 Invoke-WebRequest -Uri "http://www.7cgcg.com/*/*.php"
得到的輸出如下
1 StatusCode : 200 2 StatusDescription : OK 3 Content : 4 5 ######################################################## 6 記錄日期:2017-03-28 14:34:44 7 更新截圖數量:0 8 沒有轉碼中的視頻需要查詢. 9 10 RawContent : HTTP/1.1 200 OK 11 Vary: Accept-Encoding 12 Keep-Alive: timeout=5, max=100 13 Connection: Keep-Alive 14 Content-Length: 159 15 Content-Type: text/html;charset=utf-8 16 Date: Tue, 28 Mar 2017 06:34:43 GMT 17 Server:... 18 Forms : {} 19 Headers : {[Vary, Accept-Encoding], [Keep-Alive, timeout=5, max=100], [Connection, Keep-Alive], [Content-Length, 159]...} 20 Images : {} 21 InputFields : {} 22 Links : {} 23 ParsedHtml : System.__ComObject 24 RawContentLength : 159
可以看到,StatusCode為200,Content就是內容了。
然后可以用 Select-Object命令,選出Content這個屬性,這時候我們需要一個管道,將前一個命令的內容輸入給后面的命令進行處理,這個和批處理是一樣的,使用的是 | 符號
1 Invoke-WebRequest -Uri "http://www.7cgcg.com/*/*.php" | Select-Object -ExpandProperty Content
得到輸出如下
1 ######################################################## 2 記錄日期:2017-03-28 14:39:00 3 更新截圖數量:0 4 沒有轉碼中的視頻需要查詢.
接下來將內容保存到一個文件作為記錄即可,這邊用的是Out-File命令,注意加上-Append追加寫入開關,否則會覆蓋文件。
1 Invoke-WebRequest -Uri "http://www.7cgcg.com/*/*.php" | Select-Object -ExpandProperty Content | Out-File -Append d:\mts_log.txt
完成之后,可以將命令保存為ps1格式的powershell腳本文件,新建一個計划任務定時執行即可。