// Serialise objects to XML and POST to the Clockwork API private void XmlPost <T, U>(string url, ref T send, ref U response) { if (String.IsNullOrEmpty(url.Trim())) { throw new ArgumentException("URL Needed for POST", "url"); } if (SSL) { url = "https://" + url; } else { url = "http://" + url; } UTF8StringWriter outStream = new UTF8StringWriter(); XmlSerializer serializer = new XmlSerializer(typeof(T)); serializer.Serialize(outStream, send); string req = outStream.ToString(); outStream.Dispose(); HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(url); httpReq.UserAgent = "Clockwork .NET Wrapper/" + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(); httpReq.Timeout = 60000; httpReq.ReadWriteTimeout = 60000; httpReq.Method = "POST"; httpReq.ContentLength = System.Text.Encoding.UTF8.GetByteCount(req); httpReq.ContentType = "text/xml; charset=utf-8"; if (Proxy != null) { httpReq.Proxy = Proxy; } StreamWriter myStream = new StreamWriter(httpReq.GetRequestStream()); myStream.Write(req); myStream.Close(); HttpWebResponse httpResp = (HttpWebResponse)httpReq.GetResponse(); if (((HttpWebResponse)httpResp).StatusCode == HttpStatusCode.OK) { XmlSerializer deserializer = new XmlSerializer(typeof(U)); response = (U)deserializer.Deserialize(httpResp.GetResponseStream()); } httpResp.Close(); }
// Serialise objects to XML and POST to the Clockwork API private void XmlPost <TS, TR>(string url, ref TS send, ref TR response) { if (string.IsNullOrEmpty(url.Trim())) { throw new ArgumentException("URL Needed for POST", nameof(url)); } var outStream = new UTF8StringWriter(); var serializer = new XmlSerializer(typeof(TS)); serializer.Serialize(outStream, send); var req = outStream.ToString(); outStream.Dispose(); #if PCL try { var clientHandler = new HttpClientHandler { Proxy = Proxy, UseProxy = Proxy != null, UseCookies = false }; using (var client = new HttpClient(clientHandler)) { client.BaseAddress = new Uri((SSL ? "https://" : "http://") + BaseUrl); client.DefaultRequestHeaders.Accept.Clear(); var result = client.PostAsync(url, new StringContent(req, Encoding.UTF8)).Result; result.EnsureSuccessStatusCode(); { var responseStream = result.Content.ReadAsStreamAsync().Result; var deserializer = new XmlSerializer(typeof(TR)); if (responseStream == null) { throw new WebException("Blank response"); } response = (TR)deserializer.Deserialize(responseStream); } } } catch (AggregateException exception) { throw exception.Flatten().InnerExceptions.FirstOrDefault(); } #else if (SSL) { url = "https://" + BaseUrl + url; } else { url = "http://" + BaseUrl + url; } var httpReq = (HttpWebRequest)WebRequest.Create(url); httpReq.UserAgent = "Clockwork .NET Wrapper/" + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; httpReq.Timeout = 60000; httpReq.ReadWriteTimeout = 60000; httpReq.Method = "POST"; httpReq.ContentLength = System.Text.Encoding.UTF8.GetByteCount(req); httpReq.ContentType = "text/xml; charset=utf-8"; if (Proxy != null) { httpReq.Proxy = Proxy; } var myStream = new StreamWriter(httpReq.GetRequestStream()); myStream.Write(req); myStream.Close(); var httpResp = (HttpWebResponse)httpReq.GetResponse(); if (httpResp.StatusCode == HttpStatusCode.OK) { var deserializer = new XmlSerializer(typeof(TR)); var responseStream = httpResp.GetResponseStream(); if (responseStream == null) { throw new WebException("Blank response"); } response = (TR)deserializer.Deserialize(responseStream); } httpResp.Close(); #endif }