using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using WebScanner.Tools;
namespace WebScanner
{
public class ScannerService
{
private ScannerService()
{
//int msInterval = Convert.ToInt16(ConfigurationManager.AppSettings["TimeSpan"]);
int msInterval = AppSetting.GetInt("TimeInterval");
Timer timer = new Timer();
timer.Elapsed += Timer_Elapsed;
timer.Enabled = true;
timer.Interval = msInterval * 1000;
}
private void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
//var ms = ConfigurationManager.AppSettings["HostApi"].ToString();
var ms = AppSetting.GetValue("HostApi");
var webs = ms.Split(';');
foreach (var web in webs)
{
Action ac = () => HttpRequest(web, contenttype: "text/html; charset=utf-8");
ac.Invoke();
}
}
///
/// 不做catch处理,需要在外部做
///
///
/// 默认GET,空则补充为GET
/// 默认json,空则补充为json
/// 请求头部
/// 请求body内容
///
public static string HttpRequest(string url, string method = "GET", string contenttype = "application/json;charset=utf-8", Hashtable header = null, string data = null)
{
typeof(ScannerService).LogInfo($"request start:{url}");
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = string.IsNullOrEmpty(method) ? "GET" : method;
request.ContentType = string.IsNullOrEmpty(contenttype) ? "application/json;charset=utf-8" : contenttype;
request.Timeout = 30000;
if (header != null)
{
foreach (var i in header.Keys)
{
request.Headers.Add(i.ToString(), header[i].ToString());
}
}
if (!string.IsNullOrEmpty(data))
{
Stream requestStream = request.GetRequestStream();
byte[] bytes = Encoding.UTF8.GetBytes(data);
requestStream.Write(bytes, 0, bytes.Length);
requestStream.Close();
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader streamReader = new StreamReader(responseStream ?? throw new InvalidOperationException(), Encoding.GetEncoding("utf-8"));
string re = streamReader.ReadToEnd();
streamReader.Close();
responseStream.Close();
typeof(ScannerService).LogInfo($"request end:{re.Substring(0,100)}");
return re;
}
private static volatile ScannerService _scannerService = null;
public static ScannerService GetSingleObj()
{
return _scannerService ?? (_scannerService = new ScannerService());
}
}
}