以前写抓取网页的代码喜欢用ReadToEnd,因为简单省事,后来发现,在爬取网页的时候,如果网速很慢,ReadToEnd超时的几率很大。使用Read改写后,超时几率大大减小,完整代码如下:
/// <summary> /// HttpPost </summary> public static string HttpPost(string url,string data) { byte[] bArr = ASCIIEncoding.UTF8.GetBytes(data); // 设置参数 HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; request.CookieContainer = m_Cookie; request.Method = "POST"; request.ContentType = application/x-www-form-urlencoded; request.ContentLength = bArr.Length; request.UserAgent = Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0); Stream postStream = request.GetRequestStream(); postStream.Write(bArr,0,bArr.Length); postStream.Close(); 发送请求并获取相应回应数据 HttpWebResponse response = request.GetResponse() HttpWebResponse; 直到request.GetResponse()程序才开始向目标网页发送Post请求 Stream responseStream = response.GetResponseStream(); 返回结果网页(html)代码 MemoryStream memoryStream = new MemoryStream(); bArr = new byte[1024]; int size = responseStream.Read(bArr,0,(int)bArr.Length); while (size > ) { memoryStream.Write(bArr,size); size = responseStream.Read(bArr,1)">)bArr.Length); Thread.Sleep(1); } string content = Encoding.UTF8.GetString(memoryStream.ToArray()); return content; }
代码中Thread.Sleep(1);也可以去掉。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。