2016-09-29 16 views
0

所以我想讀取一個URL的來源,讓我們說,domain.xyz。沒問題,我可以簡單地使用HttpWebRequest工作。如何獲取只能在指定域上工作的iframe的來源?

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlAddress); 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

我的問題是,它會返回頁面源,但沒有在這個頁面內的iframe的來源。我只得到這樣的:

<iframe src="http://anotherdomain.xyz/frame_that_only_works_on_domain_xyz"></iframe> 

我想通了,我可以很容易地得到與web瀏覽器,或基本字符串函數(結果是相同的)的iframe的src,並使用該地址創建另一個HttpWebRequest的。問題是,如果我在瀏覽器(Chrome)中查看完整頁面(插入框架的位置),我會得到預期的結果。但是,如果我將src複製到另一個選項卡,則內容不一樣。它說我想查看的內容被阻止,因爲它只允許通過domain.xyz。

所以我的最後一個問題是: 如何通過指定的域模擬請求,或獲取完整的呈現頁面源?

回答

0

這可能是網絡請求的referer屬性:通常瀏覽器會告訴網絡服務器它在哪裏找到了它所請求的頁面的鏈接。

這意味着,當您爲iframe創建Web請求時,您將該請求的referer屬性設置爲包含該鏈接的頁面。

如果這不起作用,cookie可能是另一種選擇。即您必須收集爲第一個請求發送的Cookie,並將其發送給第二個請求。

+0

我試圖將Referer設置爲原始URL,並將CookieContainer與所有的Cookie填充到完全相同,但問題仍然存在......有些提供框架的網站仍然知道它是一個「爬蟲」。 –

+0

@BalázsVarga這種反應是怎樣的?你會得到一個http錯誤代碼,還是一個200響應,只是內容告訴你,你不能這樣做?如果它僅在內容中,那麼在該消息出現之前嵌入了一些腳本,圖像或類似內容?您是否也嘗試更改您的請求的瀏覽器標識符? –

+0

我沒有改變瀏覽器標識符。該響應是一個有效的html文件,其中包含一些css和一條消息,指出該內容無法直接查看。 –