工作中有个需求,定期请求多个URL。“定期”采用计划任务实现,请求URL,虽说start url可以实现,但不灵活。自己制作了个专门请求URL的工具,并记录请求结果。

控制台程序代码:

 class Program
{
//日志目录
static string logFileDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Log", DateTime.Now.ToString("yyyy-MM"));
//日志文件
static string logFileName = DateTime.Now.ToString("yyyyMMdd") + ".txt";
//日志文件锁定对象
static object logLockObject = new object(); static void Main(string[] args)
{
//创建日志目录
try
{
if (!Directory.Exists(logFileDirectory))
{
Directory.CreateDirectory(logFileDirectory);
}
}
catch (Exception ex)
{
Console.Error.WriteLine(ex.ToString());
} //执行请求任务
var tasks = ConfigurationManager.AppSettings
.AllKeys.Where(key => key.StartsWith(ConfigurationManager.AppSettings["urlSettingsKeyPrefix"]))
.Select(key => ConfigurationManager.AppSettings[key])
.Select(url => Task.Factory.StartNew(Request, url)).ToArray(); Task.WaitAll(tasks);
} /// <summary>
/// 请求指定的url
/// </summary>
/// <param name="url"></param>
static void Request(object url)
{
try
{
var request = WebRequest.Create(url.ToString()) as HttpWebRequest;
request.Timeout = Timeout.Infinite;
using (var response = request.GetResponse())
using (var responseStream = response.GetResponseStream())
using (var streamReader = new StreamReader(responseStream))
{
WriteLog(streamReader.ReadToEnd(), url);
}
}
catch (Exception ex)
{
WriteLog(ex.ToString(), url);
}
} /// <summary>
/// 写日志
/// </summary>
/// <param name="msg"></param>
private static void WriteLog(string msg, object requestUrl)
{
lock (logLockObject)
{
try
{
File.AppendAllText(
Path.Combine(logFileDirectory, logFileName),
string.Format("[#{0}]{1} {2}", Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), requestUrl)
+ Environment.NewLine
+ msg
+ Environment.NewLine);
}
catch (Exception ex)
{
Console.Error.WriteLine(ex.ToString());
}
}
}
}

App.config:

 <?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<appSettings>
<add key="urlSettingsKeyPrefix" value="urlprefix-"/> <add key="urlprefix-url1" value="http://xxxxxx"/>
<add key="urlprefix-url2" value="http://xxxxxx"/>
<add key="urlprefix-url3" value="http://xxxxxx"/>
</appSettings>
</configuration>

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

ServicePointManager.DefaultConnectionLimit = ; //可以设置大点

URL请求工具的更多相关文章

  1. WebUtils-网络请求工具类

    网络请求工具类,大幅代码借鉴aplipay. using System; using System.Collections.Generic; using System.IO; using System ...

  2. Http、Https请求工具类

    最近在做微信开发,使用http调用第三方服务API,有些是需要https协议,通过资料和自己编码,写了个支持http和https的工具类,经验证可用,现贴出来保留,也供需要的人使用(有不足的地方,也请 ...

  3. 微信https请求工具类

    工作中用到的微信https请求工具类. package com.gxgrh.wechat.tools; import com.gxgrh.wechat.wechatapi.service.System ...

  4. HTTP请求工具类

    HTTP请求工具类,适用于微信服务器请求,可以自测 代码; /// <summary> /// HTTP请求工具类 /// </summary> public class Ht ...

  5. 基于Android Volley的网络请求工具

    基于Android Volley的网络请求工具. 一.说明 AndroidVolley,Android Volley核心库及扩展工程.AndroidVolleySample,网络请求工具示例工程.Re ...

  6. 实现一个简单的http请求工具类

    OC自带的http请求用起来不直观,asihttprequest库又太大了,依赖也多,下面实现一个简单的http请求工具类 四个文件源码大致如下,还有优化空间 MYHttpRequest.h(类定义, ...

  7. 开源个.NetCore写的 - 并发请求工具PressureTool

    本篇和大家分享的是一个 并发请求工具,并发往往代表的就是压力,对于一些订单量比较多的公司这种情况很普遍,也因此出现了很多应对并发的解决方案如:分布式,队列,数据库锁等: 对于没有遇到过或者不可能线上来 ...

  8. 远程Get,Post请求工具类

    1.远程请求工具类   import java.io.*; import java.net.URL; import java.net.URLConnection; import java.util.L ...

  9. http请求工具-OkHttp用法

    OKHttp介绍 okhttp是一个第三方类库,用于android中请求网络.这是一个开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso和LeakCan ...

随机推荐

  1. webform 简单控件

    html中12个表单元素添加runat="server"后称为控件 Lable 编译之后是 <span></span> 属性:CssClass  编译成 c ...

  2. bzoj1057: [ZJOI2007]棋盘制作--最大子矩阵

    既然要求最大01子矩阵,那么把应该为0的位置上的数取反,这样就变成求最大子矩阵 最大子矩阵可以用单调栈 #include<stdio.h> #include<string.h> ...

  3. linq To DataTable

    //将IEnumerable<T>类型的集合转换为DataTable类型 1111 public static DataTable LINQToDataTable<T>(IEn ...

  4. 大端小端系统_union_栈的增长方向

    一道题引发的思考: 1.看一下之前写的union的特点,理解一下共享内存的概念 2.栈的增长方向是从高地址向低地址增长(数组比较特别,a[0]在低地址,a[n-1]在高地址)(堆由低地址到高地址存储) ...

  5. 中國區的代理協議的韓國遊戲廠商PatiGames

    “與阿裏巴巴簽署旗下游戲「突突三國」在中國區的代理協議的韓國遊戲廠商PatiGames決定與阿裏巴巴終止合作.”相信這條前不久報導的新聞,很多人並不陌生,但這背後其實並不像表面那樣簡單.早在今年4月P ...

  6. CSS3过渡、变形和动画

    1.CSS3过渡 所谓CSS3过渡,就是使用CSS3让元素从一种状态慢慢转换到另一种状态.如鼠标的悬停状态就是一种过渡.如下例子: #content a{     text-decoration: n ...

  7. Unity Aspect

    Unity封装的东西太多,所以在很多情况下回忽略这些基本的事情.游戏窗口的中Aspect是通过Game窗口中进行选择,但对于相机的Aspect Unity并没有暴露接口在设置界面中,至少在编辑器下进行 ...

  8. 浅谈java抽象类和接口

    第一次,写这个,没有把图片放上来,有兴趣的可以点击连接看原文 http://note.youdao.com/noteshare?id=aecbd52b9240f23c0954e8086b848a17 ...

  9. iOS 因为reason: 'Pushing the same view controller instance more than once is not supported而奔溃(下)

    这个问题是什么意思呢,之前遇到过几次,但程序再次打开时没有问题,也就没有重视,今天又遇到了,无法忍受啊. 控制台报的错误是:"不支持多次推入相同的视图控制器实例". 什么原因造成的 ...

  10. BT客户端实现 Peer协议设计

    与peer建立tcp连接后,首先发送handshake消息进行握手 handshake消息格式如下: 一个字节0x19 + 一个字符串'BitTorrent protocol' + 8 byte 保留 ...