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

 更新时间:2013年02月26日 17:32:13   作者:  
有时使用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 "";
}
}

相关文章

  • 如何在.NET Core应用中使用NHibernate详解

    如何在.NET Core应用中使用NHibernate详解

    NHibernate 是一个基于.Net 的针对关系型数据库的对象持久化类库。下面这篇文章主要给大家介绍了关于如何在.NET Core应用中使用NHibernate的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-08-08
  • asp.net后台弹窗如何实现

    asp.net后台弹窗如何实现

    这篇文章主要介绍了asp.net后台弹窗如何实现,需要的朋友可以参考下
    2014-02-02
  • ASP.NET Core3.1 Ocelot负载均衡的实现

    ASP.NET Core3.1 Ocelot负载均衡的实现

    这篇文章主要介绍了ASP.NET Core3.1 Ocelot负载均衡的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • .NET Core剪裁器背后的技术及工作原理介绍

    .NET Core剪裁器背后的技术及工作原理介绍

    这篇文章主要介绍了揭秘.NET Core剪裁器背后的技术,很多朋友对于这个开源项目的原理很感兴趣,因此我将通过这篇文章为大家介绍它的工作原理,需要的朋友可以参考下
    2022-03-03
  • MVC+EasyUI+三层新闻网站建立 主页布局的方法(五)

    MVC+EasyUI+三层新闻网站建立 主页布局的方法(五)

    这篇文章主要为大家详细介绍了MVC+EasyUI+三层新闻网站建立的第五篇,教大家如何进行主页布局,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • CheckBox控件默认选中,提交时永远获得选中状态的实现代码

    CheckBox控件默认选中,提交时永远获得选中状态的实现代码

    下面小编就为大家带来一篇CheckBox控件默认选中,提交时永远获得选中状态的实现代码。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • ASP.NET中基于soaphead的webservice安全机制

    ASP.NET中基于soaphead的webservice安全机制

    常会用到WebService来通讯,但WebService发布后为了能调用,一般都通过发布到IIS后调用 的。在IIS里可以通过匿名访问,但这样大家都可能访问,不安全,下面提供一种基于soaphead的安全机制。
    2016-05-05
  • C#.net格式化时间字符串达到不同的显示效果

    C#.net格式化时间字符串达到不同的显示效果

    时候我们要对时间进行转换,达到不同的显示效果,本文将帮助你实现这个多彩的效果,整理很详细,以备不时之需,感兴趣的朋友可以了解下,或许本文对你有所帮助
    2013-01-01
  • 使用vs2019加.net core 对WeiApi的创建过程详解

    使用vs2019加.net core 对WeiApi的创建过程详解

    这篇文章主要介绍了使用vs2019加.net core 对WeiApi的创建,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • 浅谈对Lambda表达式的理解

    浅谈对Lambda表达式的理解

    “Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。
    2015-07-07

最新评论