2009-07-04 104 views
9

我想製作一個PHP腳本,可以從網站捕獲頁面。認爲file_get_contents($ url)從url登錄到網站後才能訪問的file_get_contents

但是,本網站要求您填寫用戶名/密碼登錄表格,然後才能訪問任何頁面。我想,一旦登錄,網站會向您的瀏覽器發送一個身份驗證Cookie,並且每一個隨後的瀏覽器請求都會將會話信息傳回網站以驗證訪問權限。

我想知道如何使用php腳本來模擬瀏覽器的這種行爲,以獲得訪問並從本網站捕獲頁面。

更具體地說,我的問題是:

  1. 如何發送一個請求 包含我的登錄細節,以便 網站與會話 信息/餅乾回覆
  2. 我該怎麼辦閱讀會議 信息/ Cookie
  3. 我該如何回傳本次會話 信息與每個結果 請求(file_get_contents,curl)至 該網站。

感謝。

回答

15

Curl非常適合做這件事。除了設置CURLOPT_COOKIEJARCURLOPT_COOKIEFILE選項之外,您不需要執行任何其他操作。一旦通過從站點傳遞表單域來登錄,cookie將被保存,並且Curl將自動使用相同的cookie用於後續請求,如下例所示。

請注意,下面的函數將cookie保存到cookies/cookie.txt,因此請確保目錄/文件存在並且可以寫入。

$loginUrl = 'http://example.com/login'; //action from the login form 
$loginFields = array('username'=>'user', 'password'=>'pass'); //login form field names and values 
$remotePageUrl = 'http://example.com/remotepage.html'; //url of the page you want to save 

$login = getUrl($loginUrl, 'post', $loginFields); //login to the site 

$remotePage = getUrl($remotePageUrl); //get the remote page 

function getUrl($url, $method='', $vars='') { 
    $ch = curl_init(); 
    if ($method == 'post') { 
     curl_setopt($ch, CURLOPT_POST, 1); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, $vars); 
    } 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies/cookies.txt'); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies/cookies.txt'); 
    $buffer = curl_exec($ch); 
    curl_close($ch); 
    return $buffer; 
} 
+0

此工作的請客我想要的東西 - 感謝 – Chris 2011-04-10 11:07:29