/// <summary> /// Begins a new asynchronous SOAP HTTP request. This function is not thread safe. /// </summary> /// <param name="context"> The HttpRequestResponseContext type.</param> public void ExecuteSoapHttpWebRequest(HttpRequestResponseContext context) { HtmlParser parser = new HtmlParser(); ScriptingHttpState httpRequestState = new ScriptingHttpState(); httpRequestState.HttpRequestResponseContext = context; string uriString = context.Request.Url; if ( context.DecodeUrl ) { uriString = EncodeDecode.UrlDecode(uriString); } bool isException = false; // create webrequest try { //this.ValidateIPAddress(new Uri(uriString)); httpRequestState.HttpRequest = (HttpWebRequest)System.Net.WebRequest.Create(uriString); // Set HttpWebRequestProperties SetHttpWebRequestProperties(httpRequestState.HttpRequest, context.Request.RequestHttpSettings); // Apply proxy settings if ( this.ProxySettings != null ) { SetProxy(httpRequestState.HttpRequest,this.ProxySettings); } // Save cookies httpRequestState.HttpRequest.CookieContainer = new CookieContainer(); if ( context.Request.Cookies != null ) { httpRequestState.HttpRequest.CookieContainer.Add(context.Request.GetCookieCollection()); } byte[] data=null; SoapHttpWebRequest soapWebRequest = (SoapHttpWebRequest)context.Request; if ( soapWebRequest.XmlEnvelope != null ) { data = Encoding.UTF8.GetBytes(soapWebRequest.XmlEnvelope.OuterXml); // set properties //httpRequestState.HttpRequest.KeepAlive = true; //httpRequestState.HttpRequest.Timeout = 10000; httpRequestState.HttpRequest.Method = "POST"; httpRequestState.HttpRequest.ContentType = context.Request.RequestHttpSettings.ContentType; httpRequestState.HttpRequest.ContentLength = data.Length; // get request stream Stream stm = httpRequestState.HttpRequest.GetRequestStream(); stm.Write(data,0,data.Length); stm.Flush(); stm.Close(); } // Get Response IAsyncResult ar = httpRequestState.HttpRequest.BeginGetResponse(new AsyncCallback(SessionScriptingCallback),httpRequestState); // register a timeout ThreadPool.RegisterWaitForSingleObject(ar.AsyncWaitHandle, new WaitOrTimerCallback(BaseHttpForm.RequestTimeoutCallback), httpRequestState, this.GetTimeout(), true); } catch { isException = true; throw; } finally { if (isException) { if (httpRequestState.HttpResponse != null) { httpRequestState.HttpResponse.Close(); } } } }
/// <summary> /// Begins a new asynchronous HTTP Delete request. This function is not thread safe. /// </summary> /// <param name="context"> The HttpRequestResponseContext context.</param> public void ExecuteDeleteWebRequest(HttpRequestResponseContext context) { // string uri = context.Request.Url; ScriptingHttpState httpRequestState = new ScriptingHttpState(); // Update Url if form exists context.Request.Url = UpdateUrl(context.Request.Form.WriteHtmlFormTag(), context.Request.Url, false); string uri = context.Request.Url; httpRequestState.HttpRequestResponseContext = context; if ( context.DecodeUrl ) { uri = EncodeDecode.UrlDecode(uri); } bool isException = false; try { //this.ValidateIPAddress(new Uri(uri)); httpRequestState.HttpRequest = (HttpWebRequest)System.Net.WebRequest.Create(uri); // Set HttpWebRequestProperties SetHttpWebRequestProperties(httpRequestState.HttpRequest, context.Request.RequestHttpSettings); // Apply proxy settings if ( ProxySettings != null ) { SetProxy(httpRequestState.HttpRequest, ProxySettings); } // Continue headers //hwr.ContinueDelegate=getRedirectHeaders; // Save cookies httpRequestState.HttpRequest.CookieContainer = new CookieContainer(); if ( context.Request.Cookies != null ) { httpRequestState.HttpRequest.CookieContainer.Add(context.Request.GetCookieCollection()); } // Begin requesting... IAsyncResult ar = httpRequestState.HttpRequest.BeginGetResponse(new AsyncCallback(SessionScriptingCallback),httpRequestState); // register a timeout ThreadPool.RegisterWaitForSingleObject(ar.AsyncWaitHandle, new WaitOrTimerCallback(BaseHttpForm.RequestTimeoutCallback), httpRequestState, this.GetTimeout(), true); } catch { isException = true; throw; } finally { if (isException) { if (httpRequestState.HttpResponse != null) { httpRequestState.HttpResponse.Close(); } } } }
/// <summary> /// Begins a new asynchronous HTTP Post request. This function is not thread safe. /// </summary> /// <param name="context"> The HttpRequestResponseContext type.</param> public void ExecutePostWebRequestFileUpload(HttpRequestResponseContext context) { PostWebRequest postWebRequest = (PostWebRequest)context.Request; HtmlFormTag formTag = postWebRequest.Form.WriteHtmlFormTag(); UploadFileInfo[] fileInfoItems = UploadFileInfo.GetUploadFiles(formTag); HtmlParser parser = new HtmlParser(); ScriptingHttpState httpRequestState = new ScriptingHttpState(); httpRequestState.HttpRequestResponseContext = context; string uriString = context.Request.Url; if ( context.DecodeUrl ) { uriString = EncodeDecode.UrlDecode(uriString); } bool isException = false; // create webrequest try { httpRequestState.HttpRequest = (HttpWebRequest)System.Net.WebRequest.Create(uriString); // Set HttpWebRequestProperties SetHttpWebRequestProperties(httpRequestState.HttpRequest, context.Request.RequestHttpSettings); // Apply proxy settings if ( this.ProxySettings != null ) { SetProxy(httpRequestState.HttpRequest,this.ProxySettings); } // Save cookies httpRequestState.HttpRequest.CookieContainer = new CookieContainer(); if ( context.Request.Cookies != null ) { httpRequestState.HttpRequest.CookieContainer.Add(context.Request.GetCookieCollection()); } #region Post Data string boundary = "--------------" + DateTime.Now.Ticks.ToString("x"); byte[] data = null; // Build the trailing boundary string as a byte array // ensuring the boundary appears on a line by itself byte[] boundaryBytes = null; long sumFileLength = 0; foreach ( UploadFileInfo uploadFile in fileInfoItems ) { FileInfo fileInformation = new FileInfo(uploadFile.FileName); sumFileLength += fileInformation.Length; } string postdata = GenerateMimeFormData(boundary, formTag, fileInfoItems); data = Encoding.UTF8.GetBytes(postdata); long length; if ( fileInfoItems.Length == 0 ) { boundaryBytes = Encoding.ASCII.GetBytes("--" + boundary + "--\r\n\0"); length = data.Length + sumFileLength + boundaryBytes.Length; } else { boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n"); length = data.Length + sumFileLength + boundaryBytes.Length; } // set properties //httpRequestState.HttpRequest.AllowWriteStreamBuffering = false; httpRequestState.HttpRequest.ServicePoint.Expect100Continue = false; httpRequestState.HttpRequest.KeepAlive = true; httpRequestState.HttpRequest.Timeout = 120000; httpRequestState.HttpRequest.Method = "POST"; httpRequestState.HttpRequest.ContentType = "multipart/form-data; boundary=" + boundary; httpRequestState.HttpRequest.ContentLength = length; httpRequestState.HttpRequest.Headers.Add("Cache-Control","no-cache"); // get request stream and write header Stream stm = httpRequestState.HttpRequest.GetRequestStream(); stm.Write(data,0,data.Length); if ( fileInfoItems.Length > 0 ) { foreach ( UploadFileInfo uploadFile in fileInfoItems ) { UploadFile(uploadFile, boundaryBytes, stm); } } stm.Write(boundaryBytes, 0, boundaryBytes.Length); stm.Flush(); stm.Close(); #endregion // Get Response IAsyncResult ar = httpRequestState.HttpRequest.BeginGetResponse(new AsyncCallback(SessionScriptingCallback),httpRequestState); // register a timeout ThreadPool.RegisterWaitForSingleObject(ar.AsyncWaitHandle, new WaitOrTimerCallback(BaseHttpForm.RequestTimeoutCallback), httpRequestState, this.GetTimeout(), true); } catch { isException = true; throw; } finally { if (isException) { if (httpRequestState.HttpResponse != null) { httpRequestState.HttpResponse.Close(); } } } }
/// <summary> /// Begins a new HTTP Post request. This function is not thread safe. /// </summary> /// <param name="context"> The HttpRequestResponseContext type.</param> public ResponseBuffer ExecutePostWebRequestSync(HttpRequestResponseContext context) { ResponseBuffer result = null; HtmlParser parser = new HtmlParser(); ArrayList values = parser.GetArrayList(context.Request.Form.WriteHtmlFormTag()); ScriptingHttpState httpRequestState = new ScriptingHttpState(); httpRequestState.HttpRequestResponseContext = context; string uriString = context.Request.Url; if (context.DecodeUrl) { uriString = EncodeDecode.UrlDecode(uriString); } bool isException = false; // create webrequest try { //this.ValidateIPAddress(new Uri(uriString)); httpRequestState.HttpRequest = (HttpWebRequest)System.Net.WebRequest.Create(uriString); // Set HttpWebRequestProperties SetHttpWebRequestProperties(httpRequestState.HttpRequest, context.Request.RequestHttpSettings); // Apply proxy settings if (this.ProxySettings != null) { SetProxy(httpRequestState.HttpRequest, this.ProxySettings); } //httpRequestState.httpRequest.Referer = postUri; // Continue headers //hwr.ContinueDelegate = getRedirectHeaders; // Save cookies httpRequestState.HttpRequest.CookieContainer = new CookieContainer(); if (context.Request.Cookies != null) { httpRequestState.HttpRequest.CookieContainer.Add(context.Request.GetCookieCollection()); } byte[] data = null; if (values != null) { PostWebRequest postWebRequest = (PostWebRequest)context.Request; string postData = string.Empty; if (postWebRequest.UsePostData) { postData = postWebRequest.PostData; httpRequestState.HttpRequest.ContentType = context.Request.RequestHttpSettings.ContentType; } else { // transform to postdata and encode in bytes postData = GetPostData(values); httpRequestState.HttpRequest.ContentType = "application/x-www-form-urlencoded"; } data = Encoding.UTF8.GetBytes(postData); // set properties //httpRequestState.HttpRequest.AllowWriteStreamBuffering = false; httpRequestState.HttpRequest.KeepAlive = true; //httpRequestState.HttpRequest.Timeout = 120000; httpRequestState.HttpRequest.Method = "POST"; httpRequestState.HttpRequest.ContentLength = data.Length; // get request stream Stream stm = httpRequestState.HttpRequest.GetRequestStream(); stm.Write(data, 0, data.Length); stm.Flush(); stm.Close(); } result = CreateSyncResponse(httpRequestState); // Get Response // IAsyncResult ar = httpRequestState.HttpRequest.BeginGetResponse(new AsyncCallback(SessionScriptingCallback), httpRequestState); // register a timeout // ThreadPool.RegisterWaitForSingleObject(ar.AsyncWaitHandle, new WaitOrTimerCallback(BaseHttpForm.RequestTimeoutCallback), httpRequestState, this.GetTimeout(), true); } catch { isException = true; throw; } finally { if (isException) { if (httpRequestState.HttpResponse != null) { httpRequestState.HttpResponse.Close(); } } } return result; }
/// <summary> /// Sends POST Requests. /// </summary> /// <param name="postUri"> Post uri.</param> /// <param name="values"> Values to post.</param> /// <param name="stateData"> ResponseBuffer from site.</param> /// <param name="cookies"> Cookies from site.</param> /// <param name="formTag"> The HtmlFormTag value.</param> private void GetPostRequest(string postUri,ArrayList values,ResponseBuffer stateData, CookieCollection cookies, HtmlFormTag formTag) { // disable DisableFormView(); // add Messaging ShowPostRequestMessage(postUri); if ( values != null ) ShowPostedData(values); try { InitializeHttpCommands(); postForm.ProxySettings = this.ProxySettings; if ( formTag.Enctype.ToLower(System.Globalization.CultureInfo.InvariantCulture) == "multipart/form-data" ) { HttpRequestResponseContext context = new HttpRequestResponseContext(); PostWebRequest postReq = new PostWebRequest(); postReq.Form.ReadHtmlFormTag(formTag); Ecyware.GreenBlue.Engine.Scripting.Cookies c = new Cookies(cookies); postReq.Cookies = c.GetCookies(); postReq.RequestType = HttpRequestType.POST; postReq.Url = postUri; postReq.RequestHttpSettings = this.GetHttpPropertiesFromPanel(); context.Request = postReq; postForm.StartAsyncHttpPostFileUpload(context); } else { postForm.StartAsyncHttpPost(postUri,this.GetHttpPropertiesFromPanel(),values,cookies); } } catch ( Exception ex ) { this.txtMessaging.SelectionColor = Color.Red; this.txtMessaging.SelectedText = "Html Browser Error: " + ex.Message + "\r\n"; textViewerForm.EditorText = ex.Message; // enable EnableFormView(); this.navForm.StopNavigation(); this.StopProgressBarEvent(this,new ProgressBarControlEventArgs("Ready")); } }