using System; using System.IO; using System.Linq; using System.Net; using System.Text; using NLog; using Newtonsoft.Json; using Ninject; using NzbDrone.Common.Contract; namespace NzbDrone.Common { public class RestProvider { private static readonly Logger logger = LogManager.GetCurrentClassLogger(); private readonly EnvironmentProvider _environmentProvider; [Inject] public RestProvider(EnvironmentProvider environmentProvider) { _environmentProvider = environmentProvider; } public RestProvider() { } private const int TIMEOUT = 15000; private const string METHOD = "POST"; public virtual void PostData(string url, ReportBase reportBase) { reportBase.UGuid = EnvironmentProvider.UGuid; reportBase.Version = _environmentProvider.Version.ToString(); reportBase.IsProduction = EnvironmentProvider.IsProduction; PostData(url, reportBase as object); } private static void PostData(string url, object message) { try { var json = JsonConvert.SerializeObject(message); var request = (HttpWebRequest)WebRequest.Create(url); request.Timeout = TIMEOUT; request.Proxy = WebRequest.DefaultWebProxy; request.KeepAlive = false; request.ProtocolVersion = HttpVersion.Version10; request.Method = METHOD; request.ContentType = "application/json"; byte[] postBytes = Encoding.UTF8.GetBytes(json); request.ContentLength = postBytes.Length; var requestStream = request.GetRequestStream(); requestStream.Write(postBytes, 0, postBytes.Length); requestStream.Close(); var response = (HttpWebResponse)request.GetResponse(); var streamreader = new StreamReader(response.GetResponseStream()); streamreader.Close(); } catch (Exception e) { e.Data.Add("URL", url); throw; } } } }