手把手教你如何基于C#制作一個(gè)網(wǎng)址檢測工具
前言
此文主要基于C#制作一個(gè)網(wǎng)址檢測工具。隨著時(shí)間推移以及公司人員的變動(dòng),手頭所負(fù)責(zé)的項(xiàng)目也越來越多,對(duì)網(wǎng)站運(yùn)行狀況的管理也是一件讓人十分頭疼的事,秉持著偷懶是第一生產(chǎn)力的原則,制作一個(gè)工具對(duì)網(wǎng)址一鍵監(jiān)測。
實(shí)現(xiàn)流程
1、創(chuàng)建項(xiàng)目
打開Visual Studio,右側(cè)選擇創(chuàng)建新項(xiàng)目。
搜索框輸入winform,選擇windows窗體應(yīng)用,填寫對(duì)應(yīng)的保存路徑點(diǎn)擊下一步,創(chuàng)建成功后如下圖,會(huì)有一個(gè)默認(rèn)打開的Form窗體。
2、頁面設(shè)計(jì)
準(zhǔn)備對(duì)應(yīng)的圖標(biāo)素材,通過Icon以及窗體Text屬性修改窗體圖標(biāo)以及標(biāo)題顯示;同時(shí)配置StartPosition屬性值為CenterScreen,讓窗體默認(rèn)居中顯示。
在左側(cè)工具箱拖拽TextBox以及Button控件,實(shí)現(xiàn)界面大致布局。
單擊窗體上TextBox的小箭頭,設(shè)置允許TextBox置于顯示多行文本的模式。
Button控件照葫蘆畫瓢通過設(shè)置其Text屬性修改按鈕文本顯示。
3、功能實(shí)現(xiàn)
封裝http請(qǐng)求函數(shù),用于創(chuàng)建http請(qǐng)求及響應(yīng)code。
public string PingUrl(string url) { //創(chuàng)建HttpWeb請(qǐng)求 var mWebRequest = (HttpWebRequest)WebRequest.Create(url); //創(chuàng)建HttpWeb相應(yīng) var mWebResponse = (HttpWebResponse)mWebRequest.GetResponse(); mWebResponse.Close(); //獲取響應(yīng)狀態(tài)碼 string code=mWebResponse.StatusCode.ToString(); return code; }
HttpWebRequest詳解:HttpWebRequest是C#原生語法提供的實(shí)現(xiàn)了Http協(xié)議完整封裝的類,可以實(shí)現(xiàn)任意類型的Http請(qǐng)求。
屬性名稱 | 屬性值 |
---|---|
AllowAutoRedirect | 獲取或設(shè)置一個(gè)值,該值指示請(qǐng)求是否應(yīng)跟隨重定向響應(yīng) |
CookieContainer | 獲取或設(shè)置與此請(qǐng)求關(guān)聯(lián)的cookie |
Credentials | 獲取或設(shè)置請(qǐng)求的身份驗(yàn)證信息 |
KeepAlive | 獲取或設(shè)置一個(gè)值,該值指示是否與 Internet 資源建立持久性連接 |
MaximumAutomaticRedirections | 獲取或設(shè)置請(qǐng)求將跟隨的重定向的最大數(shù)目 |
Proxy | 獲取或設(shè)置請(qǐng)求的代理信息 |
SendChunked | 獲取或設(shè)置一個(gè)值,該值指示是否將數(shù)據(jù)分段發(fā)送到 Internet 資源 |
Timeout | 獲取或設(shè)置請(qǐng)求的超時(shí)值 |
UserAgent | 獲取或設(shè)置 User-agent HTTP 標(biāo)頭的值 |
ContentType | Http內(nèi)容類型 |
Headers | 指定組成 HTTP 標(biāo)頭的名稱/值對(duì)的集合 |
封裝兩個(gè)正則函數(shù),判斷用戶輸入的信息是否為正確的url地址,返回值設(shè)置為bool型即可。
/// <summary> /// 判斷一個(gè)字符串是否為url /// </summary> /// <param name="str"></param> /// <returns></returns> public static bool IsChinese(string str)// { try { string Url = @"[\u4e00-\u9fa5]"; return Regex.IsMatch(str, Url); } catch (Exception ex) { return false; } } public static bool IsWeb(string url) { string Pattern = @"^((https|http|ftp|rtsp|mms)?:\/\/)[^\s]+"; Regex r = new Regex(Pattern); Match m = r.Match(url); if (m.Success) return true; else return false; }
在窗體雙擊開始檢測按鈕,生成對(duì)應(yīng)的點(diǎn)擊事件代碼。
private void bt_ping_Click(object sender, EventArgs e){ }
定義一個(gè)多線程表達(dá)式。
private void bt_ping_Click(object sender, EventArgs e) { int count = 0; CheckForIllegalCrossThreadCalls = false; new Thread(new ThreadStart(new Action(() => { }))).Start(); }
定義一個(gè)變量記錄行號(hào)條數(shù),同時(shí)獲取用戶輸入的域名數(shù)據(jù)并進(jìn)行遍歷。
string rowNum = ""; for (int i = 0; i < txt_url.Lines.Length; i++) { }
在遍歷的過程中調(diào)用上述步驟的正則函數(shù)判斷用戶輸入的域名是否合法。
for (int i = 0; i < txt_url.Lines.Length; i++) { string url = txt_url.Lines[i].Trim(); if (!string.IsNullOrEmpty(url)) { if (!IsChinese(url)) { if (!url.StartsWith("http")) { url = string.Format("http://{0}", url); } if (IsWeb(url)) { } else { } } else { } } }
通過try catch函數(shù)捕捉異常,同時(shí)將結(jié)果進(jìn)行輸出。
if (IsWeb(url)) { count++; rowNum = count < 10 ? string.Format("0{0}", count) : count.ToString(); try { string ping_code = PingUrl(url); if (ping_code == "OK") txt_result.AppendText(string.Format("{0}:{1}————————>>{2}", rowNum, url, ping_code)); else txt_error.AppendText(string.Format("{0}:{1}————————>>{2}", rowNum, url, ping_code)); } catch (Exception ex) { txt_error.AppendText(string.Format("{0}:{1}————————>>{2}", rowNum, url, ex.Message)); txt_error.AppendText("\r\n"); } }
在遍歷結(jié)束后將行號(hào)進(jìn)行輸出,匯總顯示所檢測的域名數(shù)量。
分別雙擊清空網(wǎng)址及清空結(jié)果按鈕,生成對(duì)應(yīng)的點(diǎn)擊事件并將TextBox清空。
private void bt_clear_Click(object sender, EventArgs e) { txt_result.Text = ""; txt_error.Text = ""; } private void bt_urllist_Click(object sender, EventArgs e) { txt_url.Text = ""; }
總結(jié)
到此這篇關(guān)于如何基于C#制作一個(gè)網(wǎng)址檢測工具的文章就介紹到這了,更多相關(guān)C#制作網(wǎng)址檢測工具內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#在Winform開發(fā)中使用Grid++報(bào)表
這篇文章主要介紹了C#在Winform開發(fā)中使用Grid++報(bào)表,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03C#winform中數(shù)據(jù)庫綁定DataGrid的實(shí)現(xiàn)
本文主要介紹了C#winform中數(shù)據(jù)庫綁定DataGrid的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05c#實(shí)現(xiàn)51單片機(jī)頻率計(jì)的代碼分享(數(shù)字頻率計(jì)設(shè)計(jì))
c#實(shí)現(xiàn)51單片機(jī)頻率計(jì)的代碼分享,大家參考使用吧2013-12-12Unity實(shí)現(xiàn)模型點(diǎn)擊事件的方法
這篇文章主要介紹了Unity實(shí)現(xiàn)模型點(diǎn)擊事件的方法,本文通過多種方法給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-05-05C# Winform截圖指定控件范圍內(nèi)的圖像的流程步驟
工作所需,需要截圖軟件跑出來的界面上的圖表,但是窗口本身是可以縮放的,圖表也是做的可以跟著窗體大小一起縮放,所以就寫了一個(gè)函數(shù),用于截圖圖表容器內(nèi)的圖像,文中有函數(shù)源碼供大家參考,需要的朋友可以參考下2024-10-10