zoukankan      html  css  js  c++  java
  • HttpWebRequest的常见错误使用TcpClient可避免

    有时使用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 "";
    }
    }
  • 相关阅读:
    ES6笔记分享 part 2
    ES6笔记分享 part 1
    JS事件之自建函数bind()与兼容性问题解决
    JavaScript DOM事件对象的两个小练习 | 学习内容分享
    JavaScript数组的方法 | 学习笔记分享
    JavaScript构造函数 | 学习笔记分享
    Hexo+Github个人博客搭建 | 实战经验分享
    Hello world!
    “1+X”证书Web前端开发等级考试简介
    1+x证书Web 前端开发初级——理论考试(试卷1)
  • 原文地址:https://www.cnblogs.com/zcm123/p/3031165.html
Copyright © 2011-2022 走看看