2012-08-23 28 views
1

我搜索了這個問題,但沒有找到我正在尋找的任何東西,基本上我想用一個代理與htmlagilitypack,我有代碼做之前,但失去了它,這裏是代碼到目前爲止,這是工作。但我把自己的時間放在了我正在製作的程序上,並且需要啓用代理。使用代理htmlagilitypack

private void button1_Click(object sender, EventArgs e) 
    { 
     StringBuilder output = new StringBuilder(); 
     string raw = "http://www.google.com"; 
     HtmlWeb webGet = new HtmlWeb(); 
     webGet.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6"; 
     var document = webGet.Load(raw); 


    } 

回答

4

HtmlAgilityPack不從url下載數據。使用一個類下載支持Proxy的頁面。

例如

WebClient wc = new WebClient(); 
wc.Proxy = new WebProxy(host,port); 
var page = wc.DownloadString(url); 

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 
doc.LoadHtml(page); 

編輯

假定你讀的東西像11.22.33.44:5678從文本文件,還可以創建代理作爲

wc.Proxy = new WebProxy("11.22.33.44:5678"); 
+0

所以解析仍是如後相同的過程。 'var title = doc.DocumentNode.SelectNodes(「// * [@ class ='forumtitle']」);' –

+0

@chuckakers,簡單的是。 –

+0

謝謝!這有幫助! – TheSilverBullet

6

使用過載HtmlWeb.Load()使用代理。有兩個過載簽名:

HtmlDocument Load(string url, string method, WebProxy proxy, NetworkCredential credentials); 
HtmlDocument Load(string url, string proxyHost, int proxyPort, string userId, string password); 

我沒有任何在我的代碼中使用代理的第一手經驗,但我期望這個工作。

+0

儘管ip和端口需要在同一行上,因爲代理將從文本文件中加載,並且在我的程序中沒有單獨的代理和端口輸入,但webclient似乎工作得最好。 –

+0

解析出主機和端口,或使用接受「WebProxy」對象的重載並使用接受字符串的重載來創建實例[WebProxy(string)'](http://msdn.microsoft.com/ EN-US /庫/ k2tt59d8.aspx)。 –

2

在我們的企業設置,添加以下內容到App.config中對我的作品,而無需更改任何代碼

<system.net> 
    <defaultProxy useDefaultCredentials="true" /> 
</system.net>