Tools - Http.cs 4.3 KB
using System;
using System.IO;
using System.IO.Compression;
using System.Collections.Generic;
using System.Linq;
using System.Security.Principal;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Threading;

using Microsoft.Web.Administration;
using System.Management;
using System.Diagnostics;

using Vrh.XmlProcessing;
using System.Xml.Linq;
using Vrh.Log4Pro.MaintenanceConsole.ColorConsoleNS;
using VRH.Common;
using Microsoft.Win32;
using System.Reflection;
using Vrh.Log4Pro.MaintenanceConsole.CommandLineParserNS;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Collections.Generic;
using Newtonsoft.Json;

namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS
{
    public static class HttpTools
    {
        public enum RequestType { GET,POST,}
        public static ReturnInfoJSON GetReturninfoJSON(string url, int timeoutinseconds,RequestType mode = RequestType.GET, List<Vrh.XmlProcessing.UrlElement.UrlParameter> dictparameterlist=null)
        {
            string returninfojsonstring = "";
            timeoutinseconds = timeoutinseconds <= 0 ? 100: timeoutinseconds;
            try
            {
                return mode == RequestType.GET? _GetReturninfoJSON(url, timeoutinseconds,out returninfojsonstring) : _PostReturninfoJSON(url, timeoutinseconds, out returninfojsonstring, dictparameterlist);
            }
            catch (Exception ex) { return new ReturnInfoJSON() { ReturnValue = -1, ReturnMessage = ex.MessageNested() + "\n" + returninfojsonstring, }; }
        }
        
        private static ReturnInfoJSON _GetReturninfoJSON(string url, int timeoutinseconds, out string returninfojsonstring)
        {
            Stream returninfojsonstream;
            using (var httpclient = new HttpClient())
            {
                httpclient.Timeout = new TimeSpan(0, 0, timeoutinseconds);
                returninfojsonstream = Task.Run(async () => await httpclient.GetStreamAsync(url)).GetAwaiter().GetResult();
            }

            returninfojsonstring = GetStreamAsString(returninfojsonstream);
            ReturnInfoJSON returninfojson = (ReturnInfoJSON)JsonConvert.DeserializeObject(returninfojsonstring,typeof(ReturnInfoJSON));
            //ReturnInfoJSON returninfojson = Task.Run(async () => await JsonSerializer.DeserializeAsync<ReturnInfoJSON>(returninfojsonstream)).GetAwaiter().GetResult();
            return returninfojson;
        }
        private static ReturnInfoJSON _PostReturninfoJSON(string url, int timeoutinseconds, out string returninfojsonstring, List<Vrh.XmlProcessing.UrlElement.UrlParameter> dictparameterlist = null)
        {
            var jsonstring = JsonConvert.SerializeObject(dictparameterlist.Where(p => p.PassTo == Vrh.XmlProcessing.UrlElement.ParameterTypes.dict));
            HttpContent requestcontent = new StringContent(jsonstring);

            HttpResponseMessage returninfojsonhttpresponsemessage;
            using (var httpclient = new HttpClient())
            {
                httpclient.Timeout = new TimeSpan(0, 0, timeoutinseconds);
                returninfojsonhttpresponsemessage = Task.Run(async () => await httpclient.PostAsync(url, requestcontent)).GetAwaiter().GetResult();
            }

            var returninfojsonstream = Task.Run(async () => await returninfojsonhttpresponsemessage.Content.ReadAsStreamAsync()).GetAwaiter().GetResult();
            returninfojsonstring = GetStreamAsString(returninfojsonstream);
            ReturnInfoJSON returninfojson = (ReturnInfoJSON)JsonConvert.DeserializeObject(returninfojsonstring, typeof(ReturnInfoJSON));
            //var returninfojson = Task.Run(async () => await JsonSerializer.DeserializeAsync<ReturnInfoJSON>(returninfojsonstream)).GetAwaiter().GetResult();
            return returninfojson;
        }
        private static string GetStreamAsString(Stream stream)
        {

            StreamReader reader = new StreamReader(stream);
            return reader.ReadToEnd();

            byte[] bytes = new byte[stream.Length];
            stream.Position = 0;
            stream.Read(bytes, 0, (int)stream.Length);
            return Encoding.ASCII.GetString(bytes); // this is your string
        }
        public class ReturnInfoJSON
        {
            public int ReturnValue { get; set; }

            public string ReturnMessage { get; set; }
        }
    }
}