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 ;
}
}
}
}