URL请求工具
2018-06-23 23:05:43来源:未知 阅读 ()
工作中有个需求,定期请求多个URL。“定期”采用计划任务实现,请求URL,虽说start url可以实现,但不灵活。自己制作了个专门请求URL的工具,并记录请求结果。
控制台程序代码:
1 class Program 2 { 3 //日志目录 4 static string logFileDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Log", DateTime.Now.ToString("yyyy-MM")); 5 //日志文件 6 static string logFileName = DateTime.Now.ToString("yyyyMMdd") + ".txt"; 7 //日志文件锁定对象 8 static object logLockObject = new object(); 9 10 static void Main(string[] args) 11 { 12 //创建日志目录 13 try 14 { 15 if (!Directory.Exists(logFileDirectory)) 16 { 17 Directory.CreateDirectory(logFileDirectory); 18 } 19 } 20 catch (Exception ex) 21 { 22 Console.Error.WriteLine(ex.ToString()); 23 } 24 25 //执行请求任务 26 var tasks = ConfigurationManager.AppSettings 27 .AllKeys.Where(key => key.StartsWith(ConfigurationManager.AppSettings["urlSettingsKeyPrefix"])) 28 .Select(key => ConfigurationManager.AppSettings[key]) 29 .Select(url => Task.Factory.StartNew(Request, url)).ToArray(); 30 31 Task.WaitAll(tasks); 32 } 33 34 /// <summary> 35 /// 请求指定的url 36 /// </summary> 37 /// <param name="url"></param> 38 static void Request(object url) 39 { 40 try 41 { 42 var request = WebRequest.Create(url.ToString()) as HttpWebRequest; 43 request.Timeout = Timeout.Infinite; 44 using (var response = request.GetResponse()) 45 using (var responseStream = response.GetResponseStream()) 46 using (var streamReader = new StreamReader(responseStream)) 47 { 48 WriteLog(streamReader.ReadToEnd(), url); 49 } 50 } 51 catch (Exception ex) 52 { 53 WriteLog(ex.ToString(), url); 54 } 55 } 56 57 /// <summary> 58 /// 写日志 59 /// </summary> 60 /// <param name="msg"></param> 61 private static void WriteLog(string msg, object requestUrl) 62 { 63 lock (logLockObject) 64 { 65 try 66 { 67 File.AppendAllText( 68 Path.Combine(logFileDirectory, logFileName), 69 string.Format("[#{0}]{1} {2}", Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), requestUrl) 70 + Environment.NewLine 71 + msg 72 + Environment.NewLine); 73 } 74 catch (Exception ex) 75 { 76 Console.Error.WriteLine(ex.ToString()); 77 } 78 } 79 } 80 }
App.config:
1 <?xml version="1.0" encoding="utf-8" ?> 2 <configuration> 3 <startup> 4 <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 5 </startup> 6 <appSettings> 7 <add key="urlSettingsKeyPrefix" value="urlprefix-"/> 8 9 <add key="urlprefix-url1" value="http://xxxxxx"/> 10 <add key="urlprefix-url2" value="http://xxxxxx"/> 11 <add key="urlprefix-url3" value="http://xxxxxx"/> 12 </appSettings> 13 </configuration>
实际使用时,还需要设置下面这个才能发挥多线程的优势:
ServicePointManager.DefaultConnectionLimit = 20; //可以设置大点
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- JavaScript通过URL传递汉字的实现方法 2019-09-30
- 用js传递当前页面的url,丢失了&后面的参数 解决办 2019-08-14
- 前端笔记之微信小程序(三)GET请求案例&文件上传和 2019-08-14
- vue动态请求到的多重数组循环遍历,取值问题,如果某个值存 2019-08-14
- 关于ajax异步请求的一个细节问题 2019-08-14
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash