您的位置:首页 > 理论基础 > 计算机网络

本地接收百度等外部文件显示结果 使用TcpClient可避免HttpWebRequest的常见错误

2015-11-12 10:38 741 查看
有时使用HttpWebRequest对象会出现错误,总结有三种:

1、System.Net.WebException: 服务器提交了协议冲突. Section=ResponseStatusLine

2、System.Net.WebException: 基础连接已经关闭: 连接被意外关闭。

3、System.Net.ProtocolViolationException: 无法发送具有此谓词类型的内容正文。

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;

        }

-------------------------------------------------------------------------------------------------------------------------------------------------

using System;

using System.Data;

using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Xml;

using System.Net;

using System.Text;

using System.IO;

using System.Net.Sockets;

public partial class TEST_XMLHTTPREQUEST_Default : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

        //string name = "";

        //name = Request.QueryString["username"];

        //Response.Write(name);

    }

    protected void Button1_Click(object sender, EventArgs e)

    {

              Response.Write(GetHTMLTCP("http://www.baidu.com/s?wd=中国&pn=30"));

    }

    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;

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: