2010-11-20 7 views
2

Ich versuche, einige Web-Seiten mit dem Code unten zu holen:C# Keine ordnungsgemäße Antwort von HttpWebResponse erhalten. Codierung?

public static string FetchPage(string url) 
    { 

     HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); 

     req.Method = "GET"; 

     req.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 (.NET CLR 3.5.30729"; 
     req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; 
     req.Headers.Add("Accept-Language", "sv-se,sv;q=0.8,en-us;q=0.5,en;q=0.3"); 
     req.Headers.Add("Accept-Encoding", "gzip,deflate"); 
     req.Headers.Add("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7"); 
     req.Headers.Add("Keep-Alive", "115"); 
     req.Headers.Add("Cache-Control: max-age=0"); 
     req.AllowAutoRedirect = true; 

     req.IfModifiedSince = DateTime.Now; 

     using (HttpWebResponse resp = (HttpWebResponse)req.GetResponse()) 
     { 
      using (Stream resStream = resp.GetResponseStream()) 
      { 
       StreamReader reader = new StreamReader(resStream); 
       return reader.ReadToEnd(); 
      } 
     } 
    } 

Einige Seiten arbeiten (W3C, example.com), während die meisten anderen, die ich habe versucht, dies nicht tun (BBC.co.uk, CNN. com, usw.). Wireshark zeigt, dass ich eine richtige Antwort bekomme.

Ich habe versucht, die Codierung des Lesers auf die erwartete Codierung der Antwort (CNN - utf8) sowie jede mögliche Kombination zu setzen, aber ich hatte kein Glück.

Was verpasse ich hier?

Die ersten Bytes meiner Antwort sind immer "1f ef bf bd", wenn Sie darauf basierend etwas sagen können.

Antwort

1

Ich vermute, die wahrscheinlichste Erklärung ist, dass Sie komprimierte Daten erhalten und nicht dekomprimieren. Versuchen Sie es mit einem Stream-Filter, um es zu entpacken/entpacken. Siehe Rick Strahls blog article für weitere Informationen.

+0

dies tatsächlich der Fall war. Danke Leute. – pastapockets

1

Laden http://bbc.co.uk für mich gearbeitet, wenn die "Accept-Encoding" Header Weglassen:

req.Headers.Add("Accept-Encoding", "gzip,deflate");