zoukankan      html  css  js  c++  java
  • URL请求工具

    工作中有个需求,定期请求多个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     }
    View Code

    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>
    View Code

     实际使用时,还需要设置下面这个才能发挥多线程的优势:

    ServicePointManager.DefaultConnectionLimit = 20; //可以设置大点
  • 相关阅读:
    必须克服的10种不良阅读习惯
    如何提升你的影响力
    爱情在线:拥抱变化的男女爱情!
    时间与生命
    女子最钟爱的五种男人
    社交常用表达:把人家的名字给忘了怎么办?
    最常用英语口头禅[推荐]
    中秋节的来历
    学会欣赏自己
    转帖]白领:4大行业通往高薪之路
  • 原文地址:https://www.cnblogs.com/eval/p/5341606.html
Copyright © 2011-2022 走看看