使用WebProxy时HttpWebRequest的奇怪行为

时间:2011-01-20 20:56:42

标签: c# proxy httpwebrequest httpwebresponse webproxy

我有一个带有StreamReader的HttpWebRequest,它可以在不使用WebProxy的情况下工作得很好。当我使用WebProxy时,StreamReader会读取奇怪的字符而不是实际的html。这是代码。

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();

如果不使用WebProxy,变量html将保留URL中预期的html字符串。但是使用WebProxy时,html会保存一个类似的值:

  

“\ B \ 0 \ 0 \ 0 \ 0 \ 0 \ 0] RSY \ 0 \ tP的\”]きػ - X \ 0 \f / ! HU >Cr P$% nR z g 3 t ~q3 اٴٴ(M ?14安培; \ RD:exj p.Yo |ӎuOO\ v]。 ?}〜E:BLןԘ6+ 1岳Yy'ͧ〜#5ϩit25%p ELT和放大器; X0:-2iC $ M_6zUtJ> C-GYkOR $ PT8 + *] HY \“$ Ō�-�r�ʙ H3 \ f8JdQ(:Gerr的ܔڨ 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'tJ /符\ v RY \ F7<!\”,\一个/ IKrҿ5;}ħ + QIO] 8C NAGڟU2>

2 个答案:

答案 0 :(得分:6)

因为你传递

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

我会说你的代理会在将流发回给你之前对其进行压缩。

检查Response的标头以检查编码。

答案 1 :(得分:1)

只需使用Gzip解压缩即可。