2011-01-20 3 views
1

J'ai un HttpWebRequest avec un StreamReader qui fonctionne très bien sans utiliser de WebProxy. Lorsque j'utilise WebProxy, StreamReader lit un caractère étrange au lieu du html réel. Voici le code.Comportement étrange de HttpWebRequest lors de l'utilisation de WebProxy

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("https://URL"); 
req.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.224 Safari/534.10"; 
req.Accept = "application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"; 
req.Headers.Add("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.3"); 
req.Headers.Add("Accept-Encoding", "gzip,deflate,sdch"); 
req.Headers.Add("Accept-Language", "en-US,en;q=0.8"); 
req.Method = "GET"; 
req.CookieContainer = new CookieContainer(); 

WebProxy proxy = new WebProxy("proxyIP:proxyPort"); 
proxy.Credentials = new NetworkCredential("proxyUser", "proxyPass"); 
req.Proxy = this.proxy; 
HttpWebResponse res = (HttpWebResponse)req.GetResponse(); 
StreamReader reader = new StreamReader(res.GetResponseStream()); 
string html = reader.ReadToEnd(); 

Sans utiliser le WebProxy, la html variable contient la chaîne HTML attendue de l'URL. Mais avec un WebProxy, html détient une valeur comme ça:

« \ b \ 0 \ 0 \ 0 \ 0 \ 0 \ 0] LY \ 0 \ tP \ "] ki ػ - X \ 0 \ f /! HU > Cr P $% nR z g 3 t ~ q3 اٴ ȋ (M 14 &? \ R d: ex j p . Y o | ӎu OO . \ v]?} ~ E: b L ן Ԙ6 + l 岳 Y y'ͧ ~ # 5ϩ it 2 5 % p E L t & x0: - 2 i C $ M _6 zU tJ > C- GY k O R $ P T 8 + *] HY \ "HY $ Ō�-�r�ʙ H3 \ f8Jd Q (: G E r R ܔ ڨ W <] $ i> 8 \ b p \ = 4 \ f > & $ \ v C C vC x p | \ "b9 ʤ \ r% i w @ \ t r M ! G jP 8.D k X't J /\ v! r y \ f7 < "\", \ a/IK r ҿ5;} h + QIO] 8cnAG ڟ u2>

Répondre

6

Puisque vous passez

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

Je dirais votre proxy compresser le flux avant Je vous le renvoie.

Inspectez les en-têtes de la réponse pour vérifier le codage. Utilisez simplement Gzip pour le décompresser.

+0

Parfait. Cela a fonctionné une fois que j'ai enlevé cet en-tête. Merci Sam. – deadlock

+0

'HttpWebRequest' ne supporte même pas sdch. :) – bzlm