第 2 章 C#的网络相关处理

目录

2.1. C#中HTTP处理
2.1.1. C#中自动处理返回的压缩的HTML
2.1.2. C#中给HTTP添加代理Proxy支持
2.1.3. ReadLine或ReadToEnd会无限期挂掉
2.2. C#中处理cookie
2.2.1. C#中自动处理cookie
2.2.2. SetCookie解析有bug
2.3. C#中处理URL
2.3.1. 关于UrlEncode把空格编码为加号"+"而不是%20的问题
2.4. C#中的WebBrowser
2.4.1. DocumentCompleted被调用两次

2.1. C#中HTTP处理

2.1.1. C#中自动处理返回的压缩的HTML

当你处理http时,返回的html的header中包含:

Content-Encoding: deflate

Content-Encoding: gzip

时,说明是返回的是压缩的HTML。

想要支持压缩的html的话,C#中,在发送HttpWebRequest之前,设置AutomaticDecompression为对应的参数即可:


HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
 
......
 
req.Headers["Accept-Encoding"] = "gzip, deflate";
//req.AutomaticDecompression = DecompressionMethods.GZip;
req.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;

        

更多解释详见:

【已解决】C#中HttpWebRequest使用Proxy后异常

2.1.2. C#中给HTTP添加代理Proxy支持

示例代码:


using System.Net;
WebProxy gProxy = new WebProxy("127.0.0.1", 8087);
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Proxy = gProxy;

        

详见:【已解决】C#中HttpWebRequest支持代理

2.1.3. ReadLine或ReadToEnd会无限期挂掉

在用C#的GetResponseStream,常会遇到,ReadLine或ReadToEnd会无限期挂掉,所以,需要去加上对应的超时(timeout)设置:

详见:【已解决】C#中在GetResponseStream得到的Stream后,通过StreamReader去ReadLine或ReadToEnd会无限期挂掉 + 给StreamReader添加Timeout支持