2011-06-04 18 views
0

我正在製作一個桌面yellowpage應用程序。我可以訪問所有國家的黃頁網站,但不是澳大利亞網站。我不知道爲什麼?使用webclient方法無法訪問網站..?

下面是代碼

class Program 
{ 
    static void Main(string[] args) 
    { 
     WebClient wb = new WebClient(); 
     wb.Headers.Add("user-agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US)"); 
     string html = wb.DownloadString("http://www.yellowpages.com.au"); 
     Console.WriteLine(html); 
    } 
} 

對於所有其他網站,我拿到網站澳大利亞網站我得到空的HTML。我甚至還嘗試過httpwebrequest。

這裏是澳大利亞黃頁網站:http://www.yellowpages.com.au

在此先感謝

+0

不知道爲什麼。你得到什麼錯誤/例外? – Oded 2011-06-04 18:13:29

+0

我did not任何錯誤或例外 – Ajit 2011-06-04 18:15:06

+0

如果你張貼代碼,發佈你的真實代碼,而不是甚至不會編譯。 – svick 2011-06-04 18:17:51

回答

3

它看起來像該網站將只發送了gzip壓縮數據。嘗試切換到HttpWebRequest和使用自耦減壓:

var request = (HttpWebRequest)WebRequest.Create("http://www.yellowpages.com.au"); 
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705;)"; 
request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate"); 
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; 
+0

我試過上面的方法它不會工作 – Ajit 2011-06-04 18:23:28

+0

更新了我的答案。 – bkaid 2011-06-04 18:31:33

+0

工作感謝 – Ajit 2011-06-05 03:00:13

0

當我認爲在Wireshark的該網站的轉移,它說這是畸形的HTTP數據包。它說它使用chunked transfer,然後說下面的塊有0個字節,然後發送網站的代碼。這就是爲什麼WebClient返回一個空字符串(而不是null)。我認爲這是正確的行爲。

看來瀏覽器忽略了這個錯誤,所以他們可以正確顯示頁面。

編輯:

由於bkaid指出,服務器似乎處理髮送正確gziped響應。下面的代碼對我的作品:

WebClient wb = new WebClient(); 
wb.Headers.Add("Accept-Encoding", "gzip"); 
string html; 
using (var webStream = wb.OpenRead("http://www.yellowpages.com.au")) 
using (var gzipStream = new GZipStream(webStream, CompressionMode.Decompress)) 
using (var streamReader = new StreamReader(gzipStream)) 
    html = streamReader.ReadToEnd(); 
+0

是啊..我看到了分塊傳輸,它說內容長度爲0,當我通過Visual Studio中的調試模式查看Web響應時。它說內容長度-1,它不顯示內容編碼..因此,我不明白在那裏發生了什麼..無論如何謝謝你的工作。 – Ajit 2011-06-05 03:08:09

1

除了@ bkaid是正確的(和upvoted)的回答,您可以使用從WebClient繼承自己的類以解壓縮/手柄gzip壓縮的html:

public class GZipWebClient : WebClient 
{ 
    protected override WebRequest GetWebRequest(Uri address) 
    { 
     HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address); 
     request.AutomaticDecompression = DecompressionMethods.GZip | 
             DecompressionMethods.Deflate; 
     return request; 
    } 
} 

做完這個,以下工作就好了:

WebClient wb = new GZipWebClient(); 
string html = wb.DownloadString("http://www.yellowpages.com.au"); 
+0

有趣的是,我不知道你可以做到這一點。 – svick 2011-06-05 03:33:33