基础连接已经关闭 解决方案

本文介绍了一种解决网页抓取过程中遇到的基础连接已关闭错误的方法,通过使用HttpWebRequest替代WebRequest,并设置UserAgent、KeepAlive等属性,成功避免了连接关闭的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       /// <summary>
        /// iEncode=1- gb2312; 2- UTF8
       /// </summary>
       /// <param name="url"></param>
       /// <param name="iEncode"></param>
       /// <returns></returns>
       public static string GetPageInfo(String url, int iEncode = 1)
       {
           WebResponse wr_result = null;
           StringBuilder txthtml = new StringBuilder();
           try
           {
               //WebRequest wr_req = WebRequest.Create(url);
               //wr_result = wr_req.GetResponse();

               HttpWebRequest wr_req = WebRequest.Create(url) as HttpWebRequest;
               wr_req.UserAgent = "Mozilla/4.0   (compatible;   MSIE   6.0;   Windows   NT   5.1;   SV1;   .NET   CLR  4.0) ";
               //wr_req.UserAgent = "Mozilla/4.0   (compatible;   MSIE   6.0;   Windows   NT   5.1;   SV1;   .NET   CLR  2.0.50727) ";
               wr_req.KeepAlive = false;
               wr_req.ProtocolVersion = HttpVersion.Version10;
               wr_result = wr_req.GetResponse();
              
               Stream ReceiveStream = wr_result.GetResponseStream();
               Encoding encode = System.Text.Encoding.GetEncoding("gb2312");

               if (iEncode == 1)
               {
                   encode = System.Text.Encoding.GetEncoding("gb2312");
               }
               else if (iEncode == 2)
               {
                   encode = Encoding.UTF8;
               }

               //Encoding encode = Encoding.Unicode;
               //Encoding encode = Encoding.UTF8;

               StreamReader sr = new StreamReader(ReceiveStream, encode);
               if (true)
               {
                   Char[] read = new Char[256];
                   int count = sr.Read(read, 0, 256);
                   while (count > 0)
                   {
                       String str = new String(read, 0, count);
                       txthtml.Append(str);
                       count = sr.Read(read, 0, 256);
                   }
               }
           }
           catch (Exception ex)
           {
               txthtml.Append("err");
           }
           finally
           {
               if (wr_result != null)
               {
                   wr_result.Close();
               }
           }
           return txthtml.ToString();
       }

用这2行 

WebRequest wr_req = WebRequest.Create(url);
wr_result = wr_req.GetResponse();

就会出现 基础连接已经关闭的错误

改用

HttpWebRequest wr_req = WebRequest.Create(url) as HttpWebRequest;
wr_req.UserAgent = "Mozilla/4.0   (compatible;   MSIE   6.0;   Windows   NT   5.1;   SV1;   .NET   CLR  4.0) ";
//wr_req.UserAgent = "Mozilla/4.0   (compatible;   MSIE   6.0;   Windows   NT   5.1;   SV1;   .NET   CLR  2.0.50727) ";
wr_req.KeepAlive = false;
wr_req.ProtocolVersion = HttpVersion.Version10;
 wr_result = wr_req.GetResponse();

就可以了.


参考:

http://blog.youkuaiyun.com/flyingdream123/article/details/6766487

http://q.cnblogs.com/q/8593/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值