2014-01-18 22 views
0

我想創建webbrowser(藉助.net Webbrowser控件),其請求可以被控制。例如, , 我可以設法通過刪除img src來防止圖像加載。 但我無法找到某種方式來限制對CSS文件,js文件和CSS文件中使用的圖像文件的請求進行webbrowser控制。 此限制是有條件的。對於某些網站,我希望一切都很自然,但對於某些網站而言,它應該是可配置的。防止webbrowser發送請求到css文件

原因:希望向服務器發送較少的請求,增加響應時間並減少流量。

我正在使用下面的代碼來防止加載圖像。同樣的方式,我想要一些邏輯,這將阻止發送請求到CSS或任何其他文件,我可以決定。

 
private void webBrowser1_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e) 
     { 
      if (webBrowser1.Document != null) 
      { 
       foreach (HtmlElement imgElemt in webBrowser1.Document.Images) 
       { 
        if (imgElemt.Id == "divImagePath") 
        { 
         continue; 
        } 
        imgElemt.SetAttribute("src", ""); 
       } 
      } 
     } 
+2

這是一個有可能大量回答的問題 - 爲什麼不發佈你迄今爲止編碼的內容,並詢問關於代碼的具體問題? – matt

回答

-1

你會過得更好使用System.Net.Http.HttpClientclass請求的頁面。這樣你就可以將網頁提供給你。您可以從網站解析網頁的內容,並以相同的方式請求這些內容。

HttpClient client = new HttpClient(); 

try 
{ 
    // Make an asynchronous call to get the web page 
    HttpResponseMessage response = await client.GetAsync("http://www.msn.com/"); 
    response.EnsureSuccessStatusCode(); 
    string responseBody = await response.Content.ReadAsStringAsync(); 

    // Do something more useful with the returned page 
    Console.WriteLine(responseBody); 
} 
catch(HttpRequestException e) 
{ 
    Console.WriteLine("\nException Caught!"); 
    Console.WriteLine("Message :{0} ", e.Message); 
} 

// Need to call dispose on the HttpClient object when we 
// are done using it, so the app doesn't leak resources 
client.Dispose(true); 

如果您需要顯示您已經拉動了什麼,您可以在窗體上的WebBrowser控件中顯示它。但是,這將拉出與頁面相關的所有內容。

+0

我對HttpWebRequest有很好的瞭解。但我只想用WebBrowser控件解決方案。感謝您的回覆。 –

+0

使用WebBrowser控件的目的不在於它像一個完整的Web瀏覽器嗎?這將包括獲取網頁所需的所有內容。有可能做你想做的事情,但是你必須重載/重寫這麼多的接口,以便從頭開始更簡單。 –

+0

完美無瑕。但我不知道我從哪裏開始。 我也想過一個代理服務器,我將從瀏覽器獲得所有請求,然後我只會允許我想要的請求。但問題是,我只知道C#,不知道是否有任何開源的C#代理服務器代碼可用。 你認識誰嗎? –