在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
有时使用HttpWebRequest对象会出现错误,总结有三种: 1、System.Net.WebException: 服务器提交了协议冲突. Section=ResponseStatusLine 2、System.Net.WebException: 基础连接已经关闭: 连接被意外关闭。 3、System.Net.ProtocolViolationException: 无法发送具有此谓词类型的内容正文。 使用TcpClient对象搞定: 复制代码 代码如下: private string GetHTMLTCP(string URL) { string strHTML = "";//用来保存获得的HTML代码 TcpClient clientSocket = new TcpClient(); Uri URI = new Uri(URL); clientSocket.Connect(URI.Host, URI.Port); StringBuilder RequestHeaders = new StringBuilder();//用来保存HTML协议头部信息 RequestHeaders.AppendFormat("{0} {1} HTTP/1.1\r\n", "GET", URI.PathAndQuery); RequestHeaders.AppendFormat("Connection:close\r\n"); RequestHeaders.AppendFormat("Host:{0}\r\n", URI.Host); RequestHeaders.AppendFormat("Accept:*/*\r\n"); RequestHeaders.AppendFormat("Accept-Language:zh-cn\r\n"); RequestHeaders.AppendFormat("User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)\r\n\r\n"); Encoding encoding = Encoding.Default; byte[] request = encoding.GetBytes(RequestHeaders.ToString()); clientSocket.Client.Send(request); //获取要保存的网络流 Stream readStream = clientSocket.GetStream(); StreamReader sr = new StreamReader(readStream, Encoding.Default); strHTML = sr.ReadToEnd(); readStream.Close(); clientSocket.Close(); return strHTML; } 使用 HttpWebRequest请求页面 复制代码 代码如下: /// /// 获取html源码 /// /// /// /// static string GetHTML(string url, string param) { try { Uri uri = new Uri(url); HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(uri); myReq.Headers.Add("Accept-Encoding", "gzip,deflate");//sdch byte[] byData = Encoding.Default.GetBytes(param); myReq.Method = "post"; myReq.ContentLength = byData.Length; Stream reqStrem = myReq.GetRequestStream(); reqStrem.Write(byData, 0, byData.Length); reqStrem.Close(); HttpWebResponse result = (HttpWebResponse)myReq.GetResponse(); Stream recStream = result.GetResponseStream(); //如果是Gzip方式则需要解压 recStream = new GZipStream(recStream, CompressionMode.Decompress); StreamReader redStream = new StreamReader(recStream, System.Text.Encoding.Default); string strHTML = redStream.ReadToEnd(); redStream.Close(); recStream.Close(); result.Close(); return strHTML; } catch (Exception) { return ""; } } |
请发表评论