C# winForm 定时访问PHP页面小工具

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 = "";                                          // 访问urlpublic string strPostKey = "";                                      // 访问postKeypublic string strPostData = "";                                     // 访问postDatepublic 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();            // urlstrPostKey = TxbPostKey.Text.Trim();    // PostKeystrPostData = TxbPostData.Text.Trim();  // PostData// 校验urlif (regex.IsMatch(strURL) == false){throw new SetException("配置信息异常:访问url,必须以本地域名或本机IP开头");}// 校验postif (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-postprivate 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,Postdatastring[] line2 = lines[2].Split(','); // 开始时,分,秒string[] line3 = lines[3].Split(','); // 结束时,分,秒// 初始化-数据转换string[] visit = new string[3];int[] cron = new int[8];visit[0] = lines[0];                   // 访问urlvisit[1] = line1[0];                   // 访问postKeyvisit[2] = line1[1];                   // 访问postDatacron[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();                                // 访问urlvisit[1] = TxbPostKey.Text.Trim();                            // 访问postKeyvisit[2] = TxbPostData.Text.Trim();                           // 访问postDatacron[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;}// 访问-urlif (regex.IsMatch(visit[0]) == false){LabMsg.Text = "配置信息异常:访问url,必须以本地域名或本机IP开头";return false;}// 访问-postKeyif (visit[1] == ""){LabMsg.Text = "访问postKey,数值异常";return false;}// 访问-postDataif (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 代码:

<?php // 本脚本所有的输出都会在触发器状态栏上显示,如果输入内容过多可能会导致触发器崩溃// 基本设置
ignore_user_abort(true);                          // 忽略客户端断开 
set_time_limit(0);                                // 设置执行不超时
date_default_timezone_set('Asia/Shanghai');       // 设置时区// 定时访问
if(empty($_POST[POST_KEY]) || $_POST[POST_KEY] != POST_DATA)
{die('error_post');
}//访问者id
$remote_ip = $_SERVER["REMOTE_ADDR"];//如果是本机访问(ipv4|ipv6)
if($remote_ip != '127.0.0.1' && $remote_ip != '::1')
{die('error_ip');
}// do something// 输出反馈信息给触发器
echo $_POST[POST_KEY];// the end @nb;

 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263657.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

响应式html5模板代码,响应式多用途HTML5模板

跨浏览器兼容&#xff0c;视网膜准备&#xff0c;响应式 HTML5 / CSS3 模板&#xff0c;具有触摸支持&#xff0c;具有简洁的设计&#xff0c;多用途模板&#xff0c;适用于各种网站&#xff0c;使用此模板可以进行大量自定义&#xff0c;这将有助于您重新定义网站的品牌价值。…

HDU 2095 find your present (2)

原以为这是一纯水题&#xff0c;就果断开了1000000了数组给它&#xff08;1300多K&#xff09;&#xff0c;没想Memory果断超了&#xff0c;后来又用链表做&#xff08;写了2000多K&#xff09;&#xff0c;再次无情的被Memory刷了&#xff0c;无耐百度一下&#xff0c;竟然发现…

陕西师范大学计算机科学学院保研院校,陕西师范大学计算机科学学院(专业学位)现代教育技术保研细则...

考研真题资料优惠价原价选择陕西师范大学计算机科学学院(专业学位)现代教育技术保研细则信息&#xff0c;是考研之前需要获取相应的考研信息&#xff0c;比如考试大纲、招考专业、招考目录等等基本信息&#xff0c;这些内容是进行考研前期工作的必要准备。考生可以从各院校的研…

数据挖掘开源项目立项

项目背景 因为最近一直都在搞数据挖掘类的项目&#xff0c;且现在国内的大数据潮火热。在前几天与群里的几位兄弟聊天所以有了做一个开源项目的想法&#xff0c;以前也搞过一个开源的项目&#xff0c;当时只是想把权限集中化做一下&#xff0c;项目的名称和地址是&#xff1a; …

WinForm立体饼状图实现(附源码示例) 之配餐系统的开发

本文所要将的是在“配餐系统”开发中 立体饼状图效果的实现&#xff0c;直接贴出代码和附上示例&#xff0c;相信需要的朋友可以很容易使用&#xff01;项目中的效果图&#xff0c;如下&#xff1a; 实现 应用的是 System.Drawing.PieChart.PieChartControl 控件, PieChartHelp…

计算机注册表管理,学会注册表几个常用的设置,更好地管理自己的电脑!

注册表是Windows操作系统的核心数据库&#xff0c;存放着各种参数&#xff0c;直接控制着Windows的启动、硬件驱动程序的装载以及一些Windows应用程序的运行。从Microsoft Windows 95操作系统开始&#xff0c;注册表成为了Windows用户可以经常接触的内容&#xff0c;并在其后的…

三星自带软件测试手机电池,10图带你领略三星全新电池测试全过程,亡羊补牢?...

原标题&#xff1a;10图带你领略三星全新电池测试全过程&#xff0c;亡羊补牢&#xff1f;在2016年Note 7起火爆炸事件后&#xff0c;三星意识到此前的测试没有注意到电池问题。为此&#xff0c;三星已经改变测试流程&#xff0c;实施八点安全检查制度&#xff0c;包括某些新测…

Android自己主动化測试之Monkeyrunner用法及实例

眼下android SDK里自带的现成的測试工具有monkey 和 monkeyrunner两个。大家别看这俩兄弟名字相像&#xff0c;但事实上是完全然全不同的两个工具&#xff0c;应用在不同的測试领域。总的来说&#xff0c;monkey主要应用在压力和可靠性測试上&#xff0c;执行该命令能够随机地向…

计算机开机b00t设置,电脑boot启动项设置

打开电脑&#xff0c;按下【Delete】键进入BIOS界面&#xff0c;点击【startup(启动)】分别进入【primary Boot Sequence(主要)】、【Automatic Boot Sequence(自动)】和【Error Boot Sequence(错误)】三个页面&#xff0c;通过【】、【-】和【X】键进行项目挑选和排序&#xf…

如何向虚拟机服务器里传文件,怎么往虚拟机复制文件_如何向虚拟机传文件-win7之家...

在工作中&#xff0c;有时在使用虚拟机的时候需要往虚拟机里传文件的&#xff0c;也有遇到传不了文件的情况&#xff0c;一般都是要重新安装VMware tools下就可以了&#xff0c;那么如何向虚拟机传文件呢&#xff0c;方法很简单不难&#xff0c;下面小编给大家分享往虚拟机复制…

指针08 - 零基础入门学习C语言48

第八章&#xff1a;指针08 让编程改变世界 Change the world by program 返回指针值的函数 一个函数可以带回一个整型值、字符值、实型值等&#xff0c;也可以带回指针型的数据&#xff0c;即地址。 其概念与以前类似&#xff0c;只是带回的值的类型是指针类型而已。 这种…

算法中的递归分析和分治法的原理

分析递归算法三种方法替换法、迭代法、通用法&#xff08;master method&#xff09;作用&#xff1a;分析递归算法的运行时间分治算法将一个问题分解为与原问题相似但规模更小的若干子问题&#xff0c;递归地解这些子问题&#xff0c;然后将这些子问题的解结合起来构成原问题的…

ps4连接r星服务器稳定,移植到不同平台的《GTA5》有什么变化?与八年前相比,差距这么大...

经历过多次移植的GTA5&#xff0c;这些年都产生了哪些变化呢&#xff1f;当年首次登上PS3平台的GTA5&#xff0c;展现出无数玩家羡慕的精彩时刻&#xff0c;但好景不长&#xff0c;PS4就发布了&#xff0c;而且成功了代替了PS3&#xff0c;成为了GTA5玩家的主力军主机&#xff…

关于pycharm+opencv没有代码提示的问题解决方法记录

代码可以看出实际我们引入的应该是cv2.cv2下面. 所以我们代码只需要import cv2.cv2 as cv 即可. 记着要重新启动下pycharm哦. 可以参考:https://blog.csdn.net/az9996/article/details/90546827 转载于:https://www.cnblogs.com/lovesKey/p/11135185.html

Web前端开发CSS基础(2)

CSS 层叠样式表(英文全称&#xff1a;Cascading Style Sheets),是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言.CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化,并且能够对网页中元…

消息摘要算法-MAC算法系列

为什么80%的码农都做不了架构师&#xff1f;>>> 一、简述 mac&#xff08;Message Authentication Code&#xff0c;消息认证码算法&#xff09;是含有密钥散列函数算法&#xff0c;兼容了MD和SHA算法的特性&#xff0c;并在此基础上加上了密钥。因此MAC算法也经常…

软件开发七宗罪

导读&#xff1a;一起来看看世界各地的程序员们所共有的致命通病&#xff0c;从软件开发的地狱中拯救自己。这七宗罪你有几条&#xff1f; 想成为一名优秀的软件开发人员需要很长时间的培训和实践。但是如果不遵循合适的原则&#xff0c;即便是再好的程序员也会成为失败的牺牲品…

Spring Boot:快速入门教程

什么是Spring Boot? Spring Boot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。简而言之&#xff0c;Spring Boot通过提供默认配…

移动微技(Mobile Widget)应用开发权威指南

移动微技&#xff08;Mobile Widget&#xff09;应用开发权威指南 基本信息 作者&#xff1a; 程宝平 杨晓华 朱春梅 丛书名&#xff1a; 中国移动创新系列丛书 出版社&#xff1a;电子工业出版社 ISBN&#xff1a;9787121104527 上架时间&#xff1a;2010-4-19 出版日…

Apache、Nginx、Tomcat的区别

Apache、Nginx、Tomcat的区别NginxTomcatApache&#xff0c;Nginx与Tomcat的区别Nginx -----是一个高性能的HTTP和反向代理服务器&#xff0c;也是一个IMAP/POP3/SMTP代理服务器。** Tomcat -----servlet(jsp)应用服务器 Tomcat是运行在JVM中的一个进程。它定义为“中间件”…