URL请求工具
工作中有个需求,定期请求多个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请求工具的更多相关文章
- WebUtils-网络请求工具类
网络请求工具类,大幅代码借鉴aplipay. using System; using System.Collections.Generic; using System.IO; using System ...
- Http、Https请求工具类
最近在做微信开发,使用http调用第三方服务API,有些是需要https协议,通过资料和自己编码,写了个支持http和https的工具类,经验证可用,现贴出来保留,也供需要的人使用(有不足的地方,也请 ...
- 微信https请求工具类
工作中用到的微信https请求工具类. package com.gxgrh.wechat.tools; import com.gxgrh.wechat.wechatapi.service.System ...
- HTTP请求工具类
HTTP请求工具类,适用于微信服务器请求,可以自测 代码; /// <summary> /// HTTP请求工具类 /// </summary> public class Ht ...
- 基于Android Volley的网络请求工具
基于Android Volley的网络请求工具. 一.说明 AndroidVolley,Android Volley核心库及扩展工程.AndroidVolleySample,网络请求工具示例工程.Re ...
- 实现一个简单的http请求工具类
OC自带的http请求用起来不直观,asihttprequest库又太大了,依赖也多,下面实现一个简单的http请求工具类 四个文件源码大致如下,还有优化空间 MYHttpRequest.h(类定义, ...
- 开源个.NetCore写的 - 并发请求工具PressureTool
本篇和大家分享的是一个 并发请求工具,并发往往代表的就是压力,对于一些订单量比较多的公司这种情况很普遍,也因此出现了很多应对并发的解决方案如:分布式,队列,数据库锁等: 对于没有遇到过或者不可能线上来 ...
- 远程Get,Post请求工具类
1.远程请求工具类 import java.io.*; import java.net.URL; import java.net.URLConnection; import java.util.L ...
- http请求工具-OkHttp用法
OKHttp介绍 okhttp是一个第三方类库,用于android中请求网络.这是一个开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso和LeakCan ...
随机推荐
- Linux下redis的安装
第一部分:安装redis 希望将redis安装到此目录 /usr/local/redis 希望将安装包下载到此目录 /usr/local/src 那么安装过程指令如下: $ mkdir /usr/lo ...
- cookie小析
cookie用于存储数据,当用户访问了某个网站(网页)时,我们就可以通过cookie来向访问者电脑上存储数据1.不同的浏览器存放的cookie位置不同,也不能通用2.cookie的存储是以域名的形式进 ...
- 【转】安装第三方库出现 Python version 2.7 required, which was not found in the registry
安装第三方库出现 Python version 2.7 required, which was not found in the registry 建立一个文件 register.py 内容如下. 然 ...
- crontab中执行任务定位到秒级
每秒执行一次: * * * * * /bin/sleep 1 ; echo "1"
- zk textbox 更改字体大小及高度
.z-textbox{ height:100px; font-size:30px; padding:20px; } <textbox/> 效果如下:
- 一般处理程序如何获取session值
1.要在一般处理程序中获取其他页面的session值,需要引用名空间: using System.Web.SessionState; 2.然后继承一个接口:IRequiresSessionState ...
- lunece全文检索的入门与简单优化
2016-12-15 项目中需要加载下面几个工具包 1 package com.cn.shupu.util; import java.io.BufferedReader; import java.io ...
- Sublime P4语法高亮设置
Github插件链接:p4-syntax-highlighter 首先安装Package Control. 进入Package界面,我的目录: /Users/wasdns/Library/Applic ...
- iOS移动硬盘实现原理
iOS移动硬盘,仅仅是一个概念的包装,原理是在用户目录下创建一个特定的目录,应用层做一个界面直接访问这个目录而已. 大概流程是: 监听获得device句柄. AMDeviceConnect连接设备,并 ...
- 解决mysql数据库插入中文字段时出现??? 的问题
1.检查并修改mysql的my.ini的配置文件 default-character-set=utf8 2.建立数据库是要指定字符集 create database mydb default ...