HttpWebRequest的常见错误使用TcpClient可避免
HttpWebRequest的常见错误使用TcpClient可避免
发布时间:2016-12-29 来源:查字典编辑
摘要:有时使用HttpWebRequest对象会出现错误,总结有三种:1、System.Net.WebException:服务器提交了协议冲突.S...

有时使用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.1rn", "GET", URI.PathAndQuery);

RequestHeaders.AppendFormat("Connection:closern");

RequestHeaders.AppendFormat("Host:{0}rn", URI.Host);

RequestHeaders.AppendFormat("Accept:*/*rn");

RequestHeaders.AppendFormat("Accept-Language:zh-cnrn");

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)rnrn");

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 "";

}

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新asp.net教程学习
热门asp.net教程学习
编程开发子分类