服务器之家

服务器之家 > 正文

HttpWebRequest的常见错误使用TcpClient可避免

时间:2019-10-25 11:44     来源/作者:asp.net技术网

有时使用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 ""; 

相关文章

热门资讯

玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情 2019-06-22
超A是什么意思 你好a表达的是什么
超A是什么意思 你好a表达的是什么 2019-06-06
抖音撒撒累累是什么歌 撒撒累累张艺兴歌曲名字
抖音撒撒累累是什么歌 撒撒累累张艺兴歌曲名字 2019-06-05
返回顶部