华域联盟 .Net HttpWebRequest的常见错误使用TcpClient可避免

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

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

}

}
您可能感兴趣的文章:

  • C#中HttpWebRequest的用法详解
  • HttpWebRequest和HttpWebResponse用法小结
  • C#采用HttpWebRequest实现保持会话上传文件到HTTP的方法
  • HttpWebRequest出错.Section=ResponseHeader Detail=CR
  • .net core并发请求发送HttpWebRequest的坑解决

本文由 华域联盟 原创撰写:华域联盟 » HttpWebRequest的常见错误使用TcpClient可避免

转载请保留出处和原文链接:https://www.cnhackhy.com/47794.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者: sterben

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部