使用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;
        }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章