/// <summary> /// Used by the worker thread to start the request /// </summary> public void Start() { try { // Create the request request = (HttpWebRequest)System.Net.WebRequest.Create(URL); request.Method = Method; request.Credentials = CredentialCache.DefaultCredentials; request.Proxy = null; request.KeepAlive = false; request.Timeout = (int)Math.Round((Timeout == 0f ? WebRequests.Timeout : Timeout) * 1000f); request.ServicePoint.MaxIdleTime = request.Timeout; request.ServicePoint.Expect100Continue = ServicePointManager.Expect100Continue; request.ServicePoint.ConnectionLimit = ServicePointManager.DefaultConnectionLimit; // Optional request body for post requests var data = new byte[0]; if (Body != null) { data = Encoding.UTF8.GetBytes(Body); request.ContentLength = data.Length; request.ContentType = "application/x-www-form-urlencoded"; } if (RequestHeaders != null) request.SetRawHeaders(RequestHeaders); // Perform DNS lookup and connect (blocking) if (data.Length > 0) { request.BeginGetRequestStream(result => { if (request == null) return; try { // Write request body using (var stream = request.EndGetRequestStream(result)) stream.Write(data, 0, data.Length); } catch (Exception ex) { ResponseText = ex.Message.Trim('\r', '\n', ' '); if (request != null) request.Abort(); OnComplete(); return; } WaitForResponse(); }, null); } else { WaitForResponse(); } } catch (Exception ex) { ResponseText = ex.Message.Trim('\r', '\n', ' '); Interface.Oxide.LogException(string.Format("Web request produced exception (Url: {0})", URL), ex); if (request != null) request.Abort(); OnComplete(); } }