博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# winForm 定时访问PHP页面小工具
阅读量:4309 次
发布时间:2019-06-06

本文共 17053 字,大约阅读时间需要 56 分钟。

IDE:vs2019

项目文件:

链接: https://pan.baidu.com/s/1H-Q3nc6sKQbD32pp0vuQIg

提取码: ncce 

使用场景:定时访问本机(服务器)的某个页面,发送参数。执行计划任务。

界面:

 

C# 代码:

using System;using System.Net;using System.Text;using System.Windows.Forms;using System.Web;using System.IO;using System.Text.RegularExpressions;namespace CronVisitURL{    public partial class FormMain : Form    {        // 初始化-参数        public int autoStart = 1;                                           // 自动开始标记        public int setLines = 5;                                            // 配置信息行数        public string strURL = "";                                          // 访问url        public string strPostKey = "";                                      // 访问postKey        public string strPostData = "";                                     // 访问postDate        public int startTime = 0;                                           // 运行时段-起始        public int endTime = 0;                                             // 运行时段-结束        public Regex regex = new Regex(@"^http:\/\/(127\.0\.0\.1)|(localhost)\/"); // 访问url,校验规则        public string iniPath = Application.StartupPath + @"\setting.ini";         // 配置文件路径        public FormMain()        {            InitializeComponent();        }        // 窗体载入后        private void FormMain_Load(object sender, EventArgs e)        {            //读取配置信息            SetInfoRead();        }        // 状态栏图标单击        private void NotifyIcon1_MouseClick(object sender, MouseEventArgs e)        {            // 左键单击            if (e.Button == MouseButtons.Left)            {                Show();                Activate();                WindowState = FormWindowState.Normal;            }        }        // 状态栏图标菜单-退出        private void ExitMenuItem_Click(object sender, EventArgs e)        {            if (MessageBox.Show("你确定要退出程序吗?", "确认", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.OK)            {                notifyIcon1.Visible = false;                Close();                Dispose();                Application.Exit();            }        }        //状态栏图标菜单-显示        private void ShowMenuItem_Click(object sender, EventArgs e)        {            Show();            Activate();            WindowState = FormWindowState.Normal;        }        // 按钮-默认        private void BtnDefault_Click(object sender, EventArgs e)        {            TxbUrl.Text = "http://127.0.0.1/mws/cron/cron.php";            TxbPostKey.Text = "hf_tech";            TxbPostData.Text = "good";            NumStartHour.Value = 0;            NumStartMinute.Value = 0;            NumStartSecond.Value = 0;            NumEndHour.Value = 23;            NumEndMinute.Value = 59;            NumEndSecond.Value = 59;            NumVisitRate.Value = 1;            autoStart = 1;            LabMsg.Text = "恢复成功";        }        // 按钮-保存        private void BtnSave_Click(object sender, EventArgs e)        {            SetInfoSave();        }        // 按钮-退出        private void BtnExit_Click(object sender, EventArgs e)        {            DialogResult result = MessageBox.Show("是否退出?选否,最小化到托盘", "操作提示", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);            if (result == DialogResult.Yes)            {                Close();                Dispose();                Application.Exit();            }            else if(result == DialogResult.No)            {                WindowState = FormWindowState.Minimized;                Visible = false;                notifyIcon1.Visible = true;            }        }        // 按钮-隐藏        private void BtnHide_Click(object sender, EventArgs e)        {            Hide();            notifyIcon1.Visible = true;        }        // 按钮-暂停        private void BtnPause_Click(object sender, EventArgs e)        {            // 修改界面            BtnPause.Enabled = false;            BtnStart.Enabled = true;            groupBox1.Enabled = true;            groupBox2.Enabled = true;            panel1.Enabled = true;            LabMsg.Text = "定时访问,暂停";            timer1.Stop();        }        // 按钮-开始        private void BtnStart_Click(object sender, EventArgs e)        {            // 初始化            int visitRate = Convert.ToInt32(NumVisitRate.Value.ToString());            strURL = TxbUrl.Text.Trim();            // url            strPostKey = TxbPostKey.Text.Trim();    // PostKey            strPostData = TxbPostData.Text.Trim();  // PostData            // 校验url            if (regex.IsMatch(strURL) == false)            {                throw new SetException("配置信息异常:访问url,必须以本地域名或本机IP开头");            }            // 校验post            if (strPostKey == "")            {                throw new SetException("访问postKey,数值异常");            }            if (strPostData == "")            {                throw new SetException("访问postData,数值异常");            }            // 校验频率            if (visitRate > 3600 || visitRate < 1)            {                throw new SetException("访问频率,数值异常");            }            // 获取运行时段            GetRunTime();            // 开始访问            StartVist(visitRate);        }        // 开始访问        private void StartVist(int visitRate)        {            // 修改界面            BtnPause.Enabled = true;            BtnStart.Enabled = false;            groupBox1.Enabled = false;            groupBox2.Enabled = false;            panel1.Enabled = false;            LabMsg.Text = "定时访问,开始";            // 启动计时器            timer1.Interval = visitRate * 1000; // 默认毫秒            timer1.Start();        }        // 计时器        private void Timer1_Tick(object sender, EventArgs e)        {            // 获取当前时间            string timeStr = DateTime.Now.ToLongTimeString().ToString();            string result = Regex.Replace(timeStr, @"[^0-9]+", "");            int timeNow = Convert.ToInt32(result);            // 如果在运行时段内            if (startTime <= timeNow  && timeNow <= endTime)            {                try                {                    VisitURL();                }                catch                {                    LabMsg.Text = "访问失败,请检查后,重试";                    timer1.Stop();                }            }        }        // 绑定当前时间是否在运行时段内        private void GetRunTime()        {            // 获取运行时段            string statrHour = NumStartHour.Value.ToString();       // 开始-时            string statrMinute = NumStartMinute.Value.ToString();   // 开始-分            string statrSecond = NumStartSecond.Value.ToString();   // 开始-秒            string endHour = NumEndHour.Value.ToString();           // 结束-时            string endMinute = NumEndMinute.Value.ToString();       // 结束-分            string endSecond = NumEndSecond.Value.ToString();       // 结束-秒            // 补零            if (Convert.ToInt32(statrMinute) < 10)            {                statrMinute = "0" + statrMinute;            }            if (Convert.ToInt32(statrSecond) < 10)            {                statrSecond = "0" + statrSecond;            }            if (Convert.ToInt32(endMinute) < 10)            {                endMinute = "0" + endMinute;            }            if (Convert.ToInt32(endSecond) < 10)            {                endSecond = "0" + endSecond;            }            // 转换            string startStr = statrHour + statrMinute + statrSecond;            string endStr = endHour + endMinute + endSecond;            startTime = Convert.ToInt32(startStr);            endTime = Convert.ToInt32(endStr);        }        // 访问url-post        private void VisitURL()        {            // 初始化            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strURL);            //Post请求方式            request.Method = "POST";            // 内容类型            request.ContentType = "application/x-www-form-urlencoded";            // 参数经过URL编码            string paraUrlCoded = HttpUtility.UrlEncode(strPostKey);            paraUrlCoded += "=" + HttpUtility.UrlEncode(strPostData);            byte[] payload;            //将URL编码后的字符串转化为字节            payload = Encoding.UTF8.GetBytes(paraUrlCoded);            //设置请求的 ContentLength             request.ContentLength = payload.Length;            //获得请 求流            Stream writer = request.GetRequestStream();            //将请求参数写入流            writer.Write(payload, 0, payload.Length);            // 关闭请求流            writer.Close();            // 获得响应流            HttpWebResponse response = (HttpWebResponse)request.GetResponse();            StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);            string responseText = reader.ReadToEnd();            reader.Close();            LabMsg.Text = DateTime.Now.ToLongTimeString().ToString() + ",收到数据:" + responseText;        }        // 自动开始-图片        private void PicAutoStart_Click(object sender, EventArgs e)        {            // 不打勾            if (autoStart == 1)            {                PicAutoStart.Image = Properties.Resources.cb1;                autoStart = 0;            }            // 打勾            else            {                PicAutoStart.Image = Properties.Resources.cb2;                autoStart = 1;            }        }        // 自动开始-标签        private void LabAutoStart_Click(object sender, EventArgs e)        {            // 不打勾            if (autoStart == 1)            {                PicAutoStart.Image = Properties.Resources.cb1;                autoStart = 0;            }            // 打勾            else            {                PicAutoStart.Image = Properties.Resources.cb2;                autoStart = 1;            }        }        // 配置信息-读取        private void SetInfoRead()        {            if (File.Exists(iniPath))            {                try                {                    // 初始化-读取数据                    string[] lines = File.ReadAllLines(iniPath, Encoding.UTF8); // 将文本内容转换为数组                    string[] line1 = lines[1].Split(','); // postKey,Postdata                    string[] line2 = lines[2].Split(','); // 开始时,分,秒                    string[] line3 = lines[3].Split(','); // 结束时,分,秒                    // 初始化-数据转换                    string[] visit = new string[3];                    int[] cron = new int[8];                    visit[0] = lines[0];                   // 访问url                    visit[1] = line1[0];                   // 访问postKey                    visit[2] = line1[1];                   // 访问postData                    cron[0] = Convert.ToInt32(line2[0]);   // 开始-时                    cron[1] = Convert.ToInt32(line2[1]);   // 开始-分                    cron[2] = Convert.ToInt32(line2[2]);   // 开始-秒                    cron[3] = Convert.ToInt32(line3[0]);   // 结束-时                    cron[4] = Convert.ToInt32(line3[1]);   // 结束-分                    cron[5] = Convert.ToInt32(line3[2]);   // 结束-秒                    cron[6] = Convert.ToInt32(lines[4]);   // 访问频率                    cron[7] = Convert.ToInt32(lines[5]);   // 自动开始                    // 初始化-数据校验                    bool result = SetInfoCheck(visit, cron);                    if(result == true)                    {                        // 赋值                        TxbUrl.Text = visit[0];                        TxbPostKey.Text = visit[1];                        TxbPostData.Text = visit[2];                        NumStartHour.Value = cron[0];                        NumStartMinute.Value = cron[1];                        NumStartSecond.Value = cron[2];                        NumEndHour.Value = cron[3];                        NumEndMinute.Value = cron[4];                        NumEndSecond.Value = cron[5];                        NumVisitRate.Value = cron[6];                        autoStart = cron[7];                        // 开启后自动运行                        if (autoStart == 1)                        {                            //打勾                            PicAutoStart.Image = Properties.Resources.cb2;                            // 初始化                            strURL = visit[0];                            strPostKey = visit[1];                            strPostData = visit[2];                            // 获取运行时段                            GetRunTime();                            // 自动开始                            StartVist(cron[6]);                        }                        else                        {                            // 不打勾                            PicAutoStart.Image = Properties.Resources.cb1;                        }                        LabMsg.Text = "配置信息,读取成功";                    }                }                catch                {                    LabMsg.Text = "配置信息,读取失败,请重新保存设置";                }            }            else            {                LabMsg.Text = "配置文件,未找到,请重新保存设置";            }        }        // 配置信息-保存        private void SetInfoSave()        {            // 初始化            string[] visit = new string[3];            int[] cron = new int[8];            visit[0] = TxbUrl.Text.Trim();                                // 访问url            visit[1] = TxbPostKey.Text.Trim();                            // 访问postKey            visit[2] = TxbPostData.Text.Trim();                           // 访问postData            cron[0] = Convert.ToInt32(NumStartHour.Value.ToString());     // 开始-时            cron[1] = Convert.ToInt32(NumStartMinute.Value.ToString());   // 开始-分            cron[2] = Convert.ToInt32(NumStartSecond.Value.ToString());   // 开始-秒            cron[3] = Convert.ToInt32(NumEndHour.Value.ToString());       // 结束-时            cron[4] = Convert.ToInt32(NumEndMinute.Value.ToString());     // 结束-分            cron[5] = Convert.ToInt32(NumEndSecond.Value.ToString());     // 结束-秒            cron[6] = Convert.ToInt32(NumVisitRate.Value.ToString());     // 访问频率            cron[7] = autoStart;                                          // 自动开始            // 数据校验            bool result = SetInfoCheck(visit, cron);            if (result == true)            {                // 设置信息-字符串                string str = visit[0] + Environment.NewLine;                str += visit[1] + ',' + visit[2] + Environment.NewLine;                str += cron[0].ToString() + ',' + cron[1].ToString() + ',' + cron[2].ToString() + Environment.NewLine;                str += cron[3].ToString() + ',' + cron[4].ToString() + ',' + cron[5].ToString() + Environment.NewLine;                str += cron[6].ToString() + Environment.NewLine;                str += cron[7].ToString();                // 写入配置文件                File.WriteAllText(iniPath, str, Encoding.UTF8);                LabMsg.Text = "配置信息,保存成功";            }        }        // 配置数据校验        private bool SetInfoCheck(string[] visit, int[] cron)        {            // 参数个数-访问            if(visit.GetLength(0) !=3)            {                LabMsg.Text = "访问参数,数值异常";                return false;            }            // 参数个数-每日运行时段,访问频率,自动运行            if (cron.GetLength(0) !=8)            {                LabMsg.Text = "计时器,数值异常";                return false;            }            // 访问-url            if (regex.IsMatch(visit[0]) == false)            {                LabMsg.Text = "配置信息异常:访问url,必须以本地域名或本机IP开头";                return false;            }                        // 访问-postKey            if (visit[1] == "")            {                LabMsg.Text = "访问postKey,数值异常";                return false;            }            // 访问-postData            if (visit[2] == "")            {                LabMsg.Text = "访问postData,数值异常";                return false;            }            // 开始-时            if (cron[0] > 23 || cron[0] < 0)            {                LabMsg.Text = "每日运行时段,开始小时,数值异常";                return false;            }            // 开始-分            if (cron[1] > 60 || cron[1] < 0)            {                LabMsg.Text = "每日运行时段,开始分钟,数值异常";                return false;            }            // 开始-秒            if (cron[2] > 60 || cron[2] < 0)            {                LabMsg.Text = "每日运行时段,开始秒钟,数值异常";                return false;            }            // 结束-时            if (cron[3] > 23 || cron[3] < 0)            {                LabMsg.Text = "每日运行时段,结束小时,数值异常";                return false;            }            // 结束-分            if (cron[4] > 60 || cron[4] < 0)            {                LabMsg.Text = "每日运行时段,结束分钟,数值异常";                return false;            }            // 结束-秒            if (cron[5] > 60 || cron[5] < 0)            {                LabMsg.Text = "每日运行时段,结束秒钟,数值异常";                return false;            }            // 访问频率            if (cron[6] > 3600 || cron[ 6] < 1)            {                LabMsg.Text = "访问频率,数值异常";                return false;            }            // 自动开始            if (cron[7] > 1 || cron[7] < 0)            {                LabMsg.Text = "自动运行,数值异常";                return false;            }            return true;        }    }    // 自定义异常类    class SetException : Exception    {        public SetException(string message) : base(message)        {            MessageBox.Show(message);        }    }}// the end @nb;

php 代码:

 

转载于:https://www.cnblogs.com/nb08611033/p/11105631.html

你可能感兴趣的文章
linux下源的相关笔记(suse)
查看>>
linux系统分区文件系统划分札记
查看>>
Linux(SUSE 12)安装Tomcat
查看>>
Linux(SUSE 12)安装jboss4并实现远程访问
查看>>
Neutron在给虚拟机分配网络时,底层是如何实现的?
查看>>
netfilter/iptables全攻略
查看>>
Overlay之VXLAN架构
查看>>
Eclipse : An error occurred while filtering resources(Maven错误提示)
查看>>
在eclipse上用tomcat部署项目404解决方案
查看>>
web.xml 配置中classpath: 与classpath*:的区别
查看>>
suse如何修改ssh端口为2222?
查看>>
详细理解“>/dev/null 2>&1”
查看>>
suse如何创建定时任务?
查看>>
suse搭建ftp服务器方法
查看>>
centos虚拟机设置共享文件夹并通过我的电脑访问[增加smbd端口修改]
查看>>
文件拷贝(IFileOperation::CopyItem)
查看>>
MapReduce的 Speculative Execution机制
查看>>
大数据学习之路------借助HDP SANDBOX开始学习
查看>>
Hadoop基础学习:基于Hortonworks HDP
查看>>
为什么linux安装程序 都要放到/usr/local目录下
查看>>