服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服务器之家 - 编程语言 - ASP.NET教程 - HttpWebRequest的常见错误使用TcpClient可避免

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

2019-10-25 11:44asp.net技术网 ASP.NET教程

有时使用HttpWebRequest对象会出现错误有三种服务器提交了协议冲突/基础连接已经关闭:连接被意外关闭/无法发送具有此谓词类型的内容正文,感兴趣的朋友可以参考下本文

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

延伸 · 阅读

精彩推荐