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 "";
    }
    }
  • 相关阅读:
    linux如何查看端口或服务被占用情况
    linux网络查看及配置相关命令
    linux查看程序运行相关命令
    shell脚本编写一个用真实用户去访问的vsftpd服务器
    shell脚本监控CPU和内存利用率
    小白的个人技能树(基于自动化软件测试开发实习和软件开发实习)
    MySQL 8.0.12 基于Windows 安装教程(超级详细)
    C语言 0x7fffffff是多少(也就是INT_MAX,首位是 0,其余都是1,f代表1111)
    数通知识点
    数据结构之算法基础
  • 原文地址:https://www.cnblogs.com/zcm123/p/3031165.html
Copyright © 2011-2022 走看看