手把手教你如何基于C#制作一个网址检测工具
摔跤猫子 人气:0前言
此文主要基于C#制作一个网址检测工具。随着时间推移以及公司人员的变动,手头所负责的项目也越来越多,对网站运行状况的管理也是一件让人十分头疼的事,秉持着偷懒是第一生产力的原则,制作一个工具对网址一键监测。
实现流程
1、创建项目
打开Visual Studio,右侧选择创建新项目。
搜索框输入winform,选择windows窗体应用,填写对应的保存路径点击下一步,创建成功后如下图,会有一个默认打开的Form窗体。
2、页面设计
准备对应的图标素材,通过Icon以及窗体Text属性修改窗体图标以及标题显示;同时配置StartPosition属性值为CenterScreen,让窗体默认居中显示。
在左侧工具箱拖拽TextBox以及Button控件,实现界面大致布局。
单击窗体上TextBox的小箭头,设置允许TextBox置于显示多行文本的模式。
Button控件照葫芦画瓢通过设置其Text属性修改按钮文本显示。
3、功能实现
封装http请求函数,用于创建http请求及响应code。
public string PingUrl(string url) { //创建HttpWeb请求 var mWebRequest = (HttpWebRequest)WebRequest.Create(url); //创建HttpWeb相应 var mWebResponse = (HttpWebResponse)mWebRequest.GetResponse(); mWebResponse.Close(); //获取响应状态码 string code=mWebResponse.StatusCode.ToString(); return code; }
HttpWebRequest详解:HttpWebRequest是C#原生语法提供的实现了Http协议完整封装的类,可以实现任意类型的Http请求。
属性名称 | 属性值 |
---|---|
AllowAutoRedirect | 获取或设置一个值,该值指示请求是否应跟随重定向响应 |
CookieContainer | 获取或设置与此请求关联的cookie |
Credentials | 获取或设置请求的身份验证信息 |
KeepAlive | 获取或设置一个值,该值指示是否与 Internet 资源建立持久性连接 |
MaximumAutomaticRedirections | 获取或设置请求将跟随的重定向的最大数目 |
Proxy | 获取或设置请求的代理信息 |
SendChunked | 获取或设置一个值,该值指示是否将数据分段发送到 Internet 资源 |
Timeout | 获取或设置请求的超时值 |
UserAgent | 获取或设置 User-agent HTTP 标头的值 |
ContentType | Http内容类型 |
Headers | 指定组成 HTTP 标头的名称/值对的集合 |
封装两个正则函数,判断用户输入的信息是否为正确的url地址,返回值设置为bool型即可。
/// <summary> /// 判断一个字符串是否为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; }
在窗体双击开始检测按钮,生成对应的点击事件代码。
private void bt_ping_Click(object sender, EventArgs e){ }
定义一个多线程表达式。
private void bt_ping_Click(object sender, EventArgs e) { int count = 0; CheckForIllegalCrossThreadCalls = false; new Thread(new ThreadStart(new Action(() => { }))).Start(); }
定义一个变量记录行号条数,同时获取用户输入的域名数据并进行遍历。
string rowNum = ""; for (int i = 0; i < txt_url.Lines.Length; i++) { }
在遍历的过程中调用上述步骤的正则函数判断用户输入的域名是否合法。
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函数捕捉异常,同时将结果进行输出。
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"); } }
在遍历结束后将行号进行输出,汇总显示所检测的域名数量。
分别双击清空网址及清空结果按钮,生成对应的点击事件并将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 = ""; }
总结
加载全部内容