2011-05-14 160 views
1

我想要使用PHP獲取網站的源代碼,但是當我這樣做的時候會出現空白。我相信這是因爲您在使用該站點之前必須登錄該站點,並且在請求內容時,PHP調用未處於登錄會話中。它是否正確?有沒有辦法繞過這個或發送登錄用戶並通過PHP傳遞,以便以後可以進行調用?從登錄網站獲取網址內容

我也嘗試通過我的瀏覽器登錄到該網站,然後從同一瀏覽器調用我的本地主機中的* .php文件,但它不起作用。

這是我想在打開郵箱時獲取源的必需登錄網站的示例。這是我通常會獲取網站內容的方式。但它出現空:

$url = "http://mail.yahoo.com/mc/welcome".$params; 
$pagesource = file_get_contents($url); 

echo $pagesource; 

此代碼的工作,如果你把它叫做例如,與$url = "http://stackoverflow.com/users/432539/elcool" ;這是我的個人資料頁,並提供公開,而無需登錄

任何想法?

+0

網站知道您是否登錄的方式是通過cookie中存儲的會話ID(可能還有其他內容),因此您必須複製瀏覽器正在發送的Cookie。我想不出一種簡單的方法來做到這一點,但它肯定是可能的。 – jstanley 2011-05-14 14:44:14

回答

1

您需要使用類似cURL的東西來模擬登錄表單並將POST請求發送到遠程服務器。

看到這個職位這裏一個簡單的例子: http://davidwalsh.name/execute-http-post-php-curl

我會,不過,看是否在遠程站點提供了可用於驗證,並得到你要尋找的數據的API,這是因爲您所實施的方法(名爲Web Scraping)是不可靠的,甚至可能是非法的,這取決於遠程站點的服務條款。

+0

Yeap,也試過cURL,但只是一個簡單的版本,並沒有工作。我會看看帖子的其餘部分。 – elcool 2011-05-14 14:52:50

0

是的,首先你需要做一個登錄調用無論頁面,並使用CURLOPT_COOKIEJARCURLOPT_COOKIEFILE設置撥打電話作爲使用curl_setopt認證的用戶時保持會話的軌道。