HttpWebRequest的常見錯誤使用TcpClient可避免
1、System.Net.WebException: 服務(wù)器提交了協(xié)議沖突. Section=ResponseStatusLine
2、System.Net.WebException: 基礎(chǔ)連接已經(jīng)關(guān)閉: 連接被意外關(guān)閉。
3、System.Net.ProtocolViolationException: 無法發(fā)送具有此謂詞類型的內(nèi)容正文。
使用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協(xié)議頭部信息
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);
//獲取要保存的網(wǎng)絡(luò)流
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 "";
}
}
相關(guān)文章
asp.net省市三級聯(lián)動的DropDownList+Ajax的三種框架(aspnet/Jquery/ExtJs)示例
前段時(shí)間需要作一個的Web前端應(yīng)用,需要用多個框架,一個典型的應(yīng)用場景是省市三級聯(lián)動,基于此應(yīng)用,特將三種主要的ajax框架略作整理,方便有需要的朋友查閱。2010-06-06ASP.net中網(wǎng)站訪問量統(tǒng)計(jì)方法代碼
這篇文章介紹了ASP.net中網(wǎng)站訪問量統(tǒng)計(jì)方法代碼,有需要的朋友可以參考一下2013-11-11使用.NET命令行編譯器編譯項(xiàng)目(如ASP.NET、C#等)
很多情況你從網(wǎng)上下載了源程序,卻苦于本機(jī)沒裝開發(fā)環(huán)境而不能編譯查看,下面我簡單說一下解決辦法。2009-03-03如何使用簽名保證ASP.NET MVC OR WEBAPI的接口安全
這篇文章主要介紹了如何使用簽名保證ASP.NET MVC OR WEBAPI的接口安全,幫助大家更好的理解和學(xué)習(xí)使用.net技術(shù),感興趣的朋友可以了解下2021-04-04ASP.NET框架中的數(shù)據(jù)綁定概要與數(shù)據(jù)綁定表達(dá)式的使用
數(shù)據(jù)綁定是ASP.NET中操作數(shù)據(jù)的基礎(chǔ)方式,這里我們暫時(shí)拋開.NET提供的控件,來從基礎(chǔ)上講解ASP.NET框架中的數(shù)據(jù)綁定概要與數(shù)據(jù)綁定表達(dá)式的使用:2016-06-06asp.net小孔子cms中的數(shù)據(jù)添加修改
最近都在看小孔子cms的代碼,其添加與修改數(shù)據(jù)十分方便,做下筆記,代碼主要提取自小孔子cms,去掉了不用的函數(shù)并把相關(guān)代碼寫到一個文件中2008-08-08asp.net 獲取某個時(shí)間段的星期并以表格形式排列出來
今天遇到了個關(guān)于時(shí)間的操作,而作為初學(xué)者的我,并不是很了解時(shí)間函數(shù)的操作,所以就園里問了下別人,經(jīng)別人的幫助我自己實(shí)現(xiàn)了如何在某個時(shí)間段獲取星期。2010-03-03VS2015+Qt5+OpenCV3開發(fā)環(huán)境配置
這篇文章主要為大家詳細(xì)介紹了VS2015+Qt5+OpenCV3開發(fā)環(huán)境配置,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06Asp.Net Core對接釘釘群機(jī)器人的完整步驟記錄
這篇文章主要給大家介紹了關(guān)于Asp.Net Core對接釘釘群機(jī)器人的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03