/// <summary> /// Fills the error message and returns the ResponseBuffer. /// </summary> /// <param name="errorMessage"> An error message explaining the cause of error.</param> /// <param name="httpState"> The HTTP State</param> /// <returns> A ResponseBuffer type.</returns> internal static ResponseBuffer FillErrorBuffer(string errorMessage, HttpState httpState) { //StringBuilder textStream = new StringBuilder(); ResponseBuffer respBuffer = new ResponseBuffer(); respBuffer.ErrorMessage = errorMessage; return respBuffer; }
/// <summary> /// Creates a new InspectorPipelineCommand. /// </summary> /// <param name="clientSettings"> The HTTP Properties.</param> /// <param name="proxySettings"> The HTTP Proxy settings.</param> /// <param name="httpState"> The HTTP State.</param> /// <param name="callback"> The callback method.</param> public InspectorPipelineCommand(HttpProperties clientSettings, HttpProxy proxySettings, HttpState httpState, Delegate callback) { Initialize(); inspectorPipeline.ClientSettings = clientSettings; inspectorPipeline.ProxySettings = proxySettings; HttpStateData = httpState; CallbackMethod = callback; }
/// <summary> /// Fills the ResponseBuffer. /// </summary> /// <param name="response"> The HttpWebResponse type.</param> /// <param name="hwr"> The HttpWebRequest type.</param> /// <param name="clientSettings"> The http settings.</param> /// <param name="httpState"> The Http state.</param> /// <returns> A ResponseBuffer type.</returns> internal static ResponseBuffer FillResponseBuffer(HttpWebResponse response, HttpWebRequest hwr, HttpProperties clientSettings, HttpState httpState) { ResponseBuffer respBuffer = null; if ( CompareString.Compare(hwr.Method,"get") ) { respBuffer = new ResponseBuffer(HttpRequestType.GET); } else { respBuffer = new ResponseBuffer(HttpRequestType.POST); } respBuffer.StatusCode = (int)response.StatusCode; respBuffer.StatusDescription=response.StatusDescription; if ( response.ProtocolVersion == HttpVersion.Version11 ) { respBuffer.Version="1.1"; } else { respBuffer.Version="1.0"; } // Request Header Collection BufferBuilder.FillRequestHeader(respBuffer,hwr.Headers,hwr); // Header Collection BufferBuilder.FillResponseHeader(respBuffer,hwr,response.Headers,response); // Cookie collection response.Cookies = hwr.CookieContainer.GetCookies(hwr.RequestUri); BufferBuilder.FillCookieData(respBuffer,response.Cookies); Stream stm = response.GetResponseStream(); BufferBuilder.FillHttpBody(respBuffer,stm); stm.Close(); if ( response!=null ) { response.Close(); } return respBuffer; }
/// <summary> /// Begins a new asynchronous HTTP Get request.\r\nThis function is not thread safe. /// </summary> /// <param name="uri"> An uri to request.</param> public void StartAsyncHttpGet(string uri) { httpRequestState = new HttpState(); uri = EncodeDecode.UrlDecode(uri); uri = EncodeDecode.HtmlDecode(uri); try { //this.ValidateIPAddress(new Uri(uri)); // Set HttpWebRequestProperties //SetHttpWebRequestProperties(hwr, properties); httpRequestState.HttpRequest = (HttpWebRequest)WebRequest.Create(uri); // Continue headers //hwr.ContinueDelegate=getRedirectHeaders; // new CookieContainer httpRequestState.HttpRequest.CookieContainer = new CookieContainer(); //httpRequestState.httpRequest.Referer = uri; IAsyncResult ar = httpRequestState.HttpRequest.BeginGetResponse(new AsyncCallback(FastResponseCallback),httpRequestState); // register a timeout ThreadPool.RegisterWaitForSingleObject(ar.AsyncWaitHandle, new WaitOrTimerCallback(BaseHttpForm.RequestTimeoutCallback), httpRequestState, this.GetTimeout(), true); } catch { throw; } finally { if ( httpRequestState.HttpResponse != null ) { httpRequestState.HttpResponse.Close(); } } }
/// <summary> /// Begins a new asynchronous HTTP Get request. This function is not thread safe. /// </summary> /// <param name="uri"> An uri to request.</param> /// <param name="properties"> The HttpProperties to set for the request.</param> /// <param name="values"> The values to include for a GET request.</param> /// <param name="cookies"> The cookies to set for the request.</param> /// <param name="httpRequestState"> The HttpState.</param> public ResponseBuffer StartSyncHttpGet(string uri, HttpProperties properties, ArrayList values, CookieCollection cookies, HttpState httpRequestState) { uri = EncodeDecode.UrlDecode(uri); uri = EncodeDecode.HtmlDecode(uri); try { //this.ValidateIPAddress(new Uri(uri)); if ( values != null ) uri = AppendToUri(uri,values); httpRequestState.HttpRequest = (HttpWebRequest)WebRequest.Create(uri); // Set HttpWebRequestProperties SetHttpWebRequestProperties(httpRequestState.HttpRequest, properties); // Apply proxy settings if ( this.ProxySettings != null ) { SetProxy(httpRequestState.HttpRequest,this.ProxySettings); } // save cookies httpRequestState.HttpRequest.CookieContainer=new CookieContainer(); if ( cookies!=null ) { httpRequestState.HttpRequest.CookieContainer.Add(cookies); } HttpWebResponse httpResponse = (HttpWebResponse)httpRequestState.HttpRequest.GetResponse(); httpRequestState.HttpResponse = httpResponse; // get ResponseBuffer ResponseBuffer responseBuffer = HttpPipeline.FillResponseBuffer(httpResponse, httpRequestState.HttpRequest, properties, httpRequestState); return responseBuffer; } catch { throw; } finally { if ( httpRequestState.HttpResponse != null ) { httpRequestState.HttpResponse.Close(); } } }
/// <summary> /// Get Async post request. /// </summary> /// <param name="postUrl"> The url to post.</param> /// <param name="listValues"> The post data values.</param> /// <param name="cookies"> The cookies.</param> /// <param name="state"> The http state.</param> private void StartPostRequest(PostForm httpCommand, string postUrl, ArrayList listValues, CookieCollection cookies,HttpProperties settings, HttpState state) { try { httpCommand.StartAsyncHttpPost( postUrl, settings, listValues, cookies, state); } catch (Exception ex) { // register and show ExceptionHandler.RegisterException(ex); AbortSessionRun(ex.Message); } }
/// <summary> /// Begins a new asynchronous HTTP Get request. This function is not thread safe. /// </summary> /// <param name="uri"> An uri to request.</param> /// <param name="properties"> The HttpProperties to set for the request.</param> /// <param name="values"> The values to include for a GET request.</param> /// <param name="cookies"> The cookies to set for the request.</param> /// <param name="httpRequestState"> Sets the Http State type.</param> /// <param name="doDecode"> Decodes the uri with Url and Html.</param> public void StartAsyncHttpGet(string uri, HttpProperties properties, ArrayList values, CookieCollection cookies, HttpState httpRequestState, bool doDecode) { if ( doDecode ) { uri = EncodeDecode.UrlDecode(uri); uri = EncodeDecode.HtmlDecode(uri); } try { //this.ValidateIPAddress(new Uri(uri)); if ( values != null ) { uri = AppendToUri(uri,values); } httpRequestState.HttpRequest = (HttpWebRequest)WebRequest.Create(uri); // Set HttpWebRequestProperties SetHttpWebRequestProperties(httpRequestState.HttpRequest, properties); // Apply proxy settings if ( this.ProxySettings != null ) { SetProxy(httpRequestState.HttpRequest,this.ProxySettings); } // Continue headers //hwr.ContinueDelegate=getRedirectHeaders; // save cookies httpRequestState.HttpRequest.CookieContainer=new CookieContainer(); if ( cookies!=null ) { httpRequestState.HttpRequest.CookieContainer.Add(cookies); } //httpRequestState.httpRequest.Referer = uri; IAsyncResult ar = httpRequestState.HttpRequest.BeginGetResponse(new AsyncCallback(FastResponseCallback),httpRequestState); // register a timeout ThreadPool.RegisterWaitForSingleObject(ar.AsyncWaitHandle, new WaitOrTimerCallback(BaseHttpForm.RequestTimeoutCallback), httpRequestState, this.GetTimeout(), true); } catch { throw; } finally { 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 StartAsyncHttpPostFileUpload(Ecyware.GreenBlue.Engine.Scripting.HttpRequestResponseContext context) { Ecyware.GreenBlue.Engine.Scripting.PostWebRequest postWebRequest = (Ecyware.GreenBlue.Engine.Scripting.PostWebRequest)context.Request; HtmlFormTag formTag = postWebRequest.Form.WriteHtmlFormTag(); UploadFileInfo[] fileInfoItems = UploadFileInfo.GetUploadFiles(formTag); HtmlParser parser = new HtmlParser(); httpRequestState = new HttpState(); string uriString = context.Request.Url; if ( context.DecodeUrl ) { uriString = EncodeDecode.UrlDecode(uriString); } // 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(FastResponseCallback),httpRequestState); // register a timeout ThreadPool.RegisterWaitForSingleObject(ar.AsyncWaitHandle, new WaitOrTimerCallback(BaseHttpForm.RequestTimeoutCallback), httpRequestState,this.GetTimeout(), true); } catch { throw; } finally { if ( httpRequestState.HttpResponse != null ) { httpRequestState.HttpResponse.Close(); } } }
/// <summary> /// Starts a new HTTP Post request. /// </summary> /// <param name="postUri"> The Url string.</param> /// <param name="properties"> The HttpProperties to set for the request.</param> /// <param name="values"> The data to post.</param> /// <param name="cookies"> The cookie data to set for the request.</param> /// <returns> A ResponseBuffer type.</returns> public ResponseBuffer StartSyncHttpPost(string postUri,HttpProperties properties,ArrayList values, CookieCollection cookies) { HttpWebResponse response=null; ResponseBuffer respBuffer=new ResponseBuffer(); httpRequestState = new HttpState(); postUri = EncodeDecode.UrlDecode(postUri); postUri = EncodeDecode.HtmlDecode(postUri); // create webrequest try { //this.ValidateIPAddress(new Uri(postUri)); httpRequestState.HttpRequest = (HttpWebRequest)WebRequest.Create(postUri); // Set HttpWebRequestProperties SetHttpWebRequestProperties(httpRequestState.HttpRequest, properties); // Apply proxy settings if ( this.ProxySettings != null ) { SetProxy(httpRequestState.HttpRequest,this.ProxySettings); } byte[] data=null; if (values!=null) { // transform to postdata and encode in bytes string postData = GetPostData(values); data=Encoding.UTF8.GetBytes(postData); } //httpRequestState.httpRequest.Referer = postUri; // set properties httpRequestState.HttpRequest.Method="POST"; httpRequestState.HttpRequest.ContentType="application/x-www-form-urlencoded"; httpRequestState.HttpRequest.ContentLength=data.Length; // get request stream Stream stm = httpRequestState.HttpRequest.GetRequestStream(); stm.Write(data,0,data.Length); stm.Close(); //hwr.ContinueDelegate=getRedirectHeaders; // save cookies httpRequestState.HttpRequest.CookieContainer=new CookieContainer(); if ( cookies!=null ) { httpRequestState.HttpRequest.CookieContainer.Add(cookies); } HttpWebResponse httpResponse = (HttpWebResponse)httpRequestState.HttpRequest.GetResponse(); httpRequestState.HttpResponse = httpResponse; // get ResponseBuffer respBuffer = HttpPipeline.FillResponseBuffer(httpResponse, httpRequestState.HttpRequest, properties, httpRequestState); } catch (ProtocolViolationException p) { if ( response!=null ) { response.Close(); } respBuffer.ErrorMessage = "Protocol Exception:" + p.Message; return respBuffer; } catch (WebException w) { StringBuilder s = new StringBuilder(); s.Append("Error message:"); s.Append(w.Message); s.Append("\r\nStatus Code:"); s.Append(((HttpWebResponse)w.Response).StatusCode); s.Append("\r\nStatus Description:"); s.Append(((HttpWebResponse)w.Response).StatusDescription); if ( response!=null ) { response.Close(); } respBuffer.ErrorMessage = s.ToString(); return respBuffer; } // response here return respBuffer; }
/// <summary> /// Get Async get request. /// </summary> /// <param name="getUrl"> The url.</param> /// <param name="values"> The get values.</param> /// <param name="cookies"> The cookies.</param> /// <param name="state"> The http state.</param> private void StartGetRequest(GetForm httpCommand, string getUrl, ArrayList values, CookieCollection cookies, HttpProperties settings, HttpState state) { try { httpCommand.StartAsyncHttpGet( getUrl, settings, values, cookies, state, false); } catch (Exception ex) { // register and show ExceptionHandler.RegisterException(ex); AbortSessionRun(ex.Message); } }
/// <summary> /// Begins a new asynchronous HTTP Post request. This function is not thread safe. /// </summary> /// <param name="postUri"> The Url string.</param> /// <param name="properties"> The HttpProperties to set for the request.</param> /// <param name="values"> The data to post.</param> /// <param name="cookies"> The cookie data to set for the request.</param> /// <param name="httpRequestState"> The HttpState.</param> public void StartAsyncHttpPost(string postUri,HttpProperties properties,ArrayList values, CookieCollection cookies, HttpState httpRequestState) { // httpRequestState = new HttpState(); // httpRequestState.TestItem = unitTestItem; // httpRequestState.IsLastItem = lastItem; postUri = EncodeDecode.UrlDecode(postUri); postUri = EncodeDecode.HtmlDecode(postUri); // create webrequest try { //this.ValidateIPAddress(new Uri(postUri)); httpRequestState.HttpRequest = (HttpWebRequest)WebRequest.Create(postUri); // Set HttpWebRequestProperties SetHttpWebRequestProperties(httpRequestState.HttpRequest, properties); // 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 ( cookies!=null ) { httpRequestState.HttpRequest.CookieContainer.Add(cookies); } byte[] data=null; if (values!=null) { // transform to postdata and encode in bytes string postData = GetPostData(values); data = Encoding.UTF8.GetBytes(postData); // set properties httpRequestState.HttpRequest.Method="POST"; httpRequestState.HttpRequest.ContentType="application/x-www-form-urlencoded"; httpRequestState.HttpRequest.ContentLength=data.Length; // get request stream // TODO: async, but in our example we ain't posting files Stream stm = httpRequestState.HttpRequest.GetRequestStream(); stm.Write(data,0,data.Length); stm.Flush(); stm.Close(); } // Get Response IAsyncResult ar = httpRequestState.HttpRequest.BeginGetResponse(new AsyncCallback(FastResponseCallback),httpRequestState); // register a timeout ThreadPool.RegisterWaitForSingleObject(ar.AsyncWaitHandle, new WaitOrTimerCallback(BaseHttpForm.RequestTimeoutCallback), httpRequestState, this.GetTimeout(), true); } catch { throw; } finally { if ( httpRequestState.HttpResponse != null ) { httpRequestState.HttpResponse.Close(); } } }
/// <summary> /// Returns the result from the safe requests. /// </summary> /// <param name="sender"> The sender object.</param> /// <param name="e"> The ResponseEventArgs.</param> private void SafeSessionResult_EndHttp(object sender, ResponseEventArgs e) { // if is not running, then exit ... if ( this.IsRunning ) { // on return, run each test SessionRequest testRequest = ((HttpState)e.State).TestSessionRequest; // add cookies to cookie manager cookieManager.AddCookies(e.Response.CookieCollection); Uri responseUri = (Uri)e.Response.ResponseHeaderCollection["Response Uri"]; // // Update Session Headers // if ( ( testRequest.Url.ToString() != responseUri.ToString() ) && ( responseUri != null ) ) // { // // Updates the Test Url with the response uri from the safe session // testRequest.Url = responseUri; // } try { #region Apply Tests and execute safe requests if ( testRequest.WebUnitTest != null ) { if ( testRequest.WebUnitTest.Tests != null ) { #region Apply tests if ( ( testRequest.WebUnitTest.Tests.Count > 0 ) ) { // matchId > currentRestart // apply tests ApplyRequestTests(testRequest, e.Response); } #endregion // add safe test report // HtmlUnitTestReport report = rptBuilder.BuildReport(e); // reports.Add(report); HttpState state = new HttpState(); state.SessionRequestId = ((HttpState)e.State).SessionRequestId + 1; // if equal, then we stop to request and enabled the report. if ( state.SessionRequestId == this.SafeSession.SessionRequests.Count ) { // end // show report UnitTestSessionReportEventArgs args = new UnitTestSessionReportEventArgs(); args.Report = reports; this.CreateReportEvent(this, args); } else { // continue state.TestSessionRequest = this.TestSession.SessionRequests[state.SessionRequestId]; ResponseBuffer inputResponse = e.Response; // call safe request backtracking else call next safe request directly if ( this.SafeSession.AllowSafeRequestBacktracking ) { this.ExecuteNextSafeRequestById(state, inputResponse, state.SessionRequestId); } else { this.ExecuteNextSafeRequest(state, inputResponse); } } } } #endregion } catch ( WebException web) { ExceptionHandler.RegisterException(web); AbortSessionRun(web.Message); } catch (Exception ex) { ExceptionHandler.RegisterException(ex); AbortSessionRun(ex.Message); } } else { // abort requests this.safeSessionGetRequest.SafeAbortRequest(); this.safeSessionPostRequest.SafeAbortRequest(); } }
/// <summary> /// PacketStateData Constructor. /// </summary> /// <param name="state"> The HttpState associated with the request.</param> /// <param name="response"> The HttpWebResponse.</param> public PacketStateData(HttpState state,HttpWebResponse response) { this.HttpStateData = state; this.WebResponse = response; }
/// <summary> /// Executes the next safe request in order. Uses the session cookies, instead of updating them. /// </summary> /// <param name="state"> The HTTP state.</param> /// <param name="responseBufferData"> The ResponseBuffer.</param> /// <param name="loopToId"> The request id to start the loop.</param> private void ExecuteNextSafeRequestById(HttpState state, ResponseBuffer responseBufferData, int loopToId) { CookieCollection cookies = null; //ResponseBuffer result = null; // Get safe session and execute Session safeSession = this.SafeSession; int k = -1; if ( state.SafeSessionRequestCurrentId == -1 ) { state.SafeSessionRequestCurrentId = 0; k = 0; } else { k = state.SafeSessionRequestCurrentId; } // settings HttpProperties httpSettings = null; if ( safeSession.SessionRequests[k].RequestHttpSettings == null ) { httpSettings = loopPostRequest.ClientSettings; } else { httpSettings = safeSession.SessionRequests[k].RequestHttpSettings; } if ( safeSession.SessionRequests[k].RequestType == HttpRequestType.GET ) { // if ( responseBufferData.ResponseHeaderCollection.ContainsKey("Location") ) // { // #region Redirect // // Location is not empty // if ( ((string)responseBufferData.ResponseHeaderCollection["Location"])!=String.Empty ) // { // string location = (string)responseBufferData.ResponseHeaderCollection["Location"]; // Uri url = (Uri)responseBufferData.ResponseHeaderCollection["Response Uri"]; // // string redirectUri = UriResolver.ResolveUrl(url,location); // // // get cookies ny url. // if ( this.SafeSession.IsCookieUpdatable ) // { // cookies = cookieManager.GetCookies(new Uri(redirectUri)); // } else { // cookies = safeSession.SessionRequests[k].RequestCookies; // } // // // Request, we only use url, http settings and cookies, because // // IE doesn't returns and arraylist of values for GET requests. // this.StartGetRequest(this.loopGetRequest, // redirectUri, // null, // cookies, // httpSettings, // state); // // // } // #endregion // } // else // { #region Get Request // get cookies ny url. if ( this.SafeSession.IsCookieUpdatable ) { cookies = cookieManager.GetCookies(safeSession.SessionRequests[k].Url); } else { cookies = safeSession.SessionRequests[k].RequestCookies; } GetSessionRequest sessionRequest = (GetSessionRequest)safeSession.SessionRequests[k]; //this.DisplaySessionProcessEvent(this, new SessionCommandProcessEventArgs("Requesting " + sessionRequest.Url.ToString())); // Request, we only use url, http settings and cookies, because // IE doesn't returns and arraylist of values for GET requests. this.StartGetRequest(this.loopGetRequest, sessionRequest.Url.ToString(), null, cookies, httpSettings, state); #endregion //} } else if ( safeSession.SessionRequests[k].RequestType == HttpRequestType.POST ) { #region Post Request PostSessionRequest sessionRequest = (PostSessionRequest)safeSession.SessionRequests[k]; // Post url string postUrl = String.Empty; #region Update post url //if ( this.TestSession.SessionRequests[k].UpdateSessionUrl ) //{ Uri postUri = null; // if response headers null, use from response buffer if ( sessionRequest.ResponseHeaders == null ) { postUri = (Uri)responseBufferData.ResponseHeaderCollection["Response Uri"]; } else { // if it has uri if ( sessionRequest.ResponseHeaders.ContainsKey("Response Uri") ) { if ( sessionRequest.ResponseHeaders["Response Uri"] != null ) { postUri = (Uri)sessionRequest.ResponseHeaders["Response Uri"]; } } } string s = string.Empty; if ( postUri.Query.Length > 0 ) { s = postUri.AbsoluteUri.Replace(postUri.Query,""); } else { s = postUri.AbsoluteUri; } string action = parser.GetFormActionByAbsoluteUrl(s, responseBufferData.HttpBody); if ( action == "" ) { postUrl = s; } else { // Resolve url postUrl = UriResolver.ResolveUrl(postUri,action); } //} #endregion // get cookies. if ( this.SafeSession.IsCookieUpdatable ) { cookies = cookieManager.GetCookies(new Uri(postUrl)); } else { cookies = sessionRequest.RequestCookies; } //SessionCommandProcessEventArgs args = new SessionCommandProcessEventArgs("Requesting " + sessionRequest.Url.ToString()); // // Posted Data Event Console Info ArrayList listValues = parser.GetArrayList(sessionRequest.Form, responseBufferData.HttpBody); //string posted = ConvertToPostDataString(listValues); //args.Detail = "Posted data: " + posted; //this.DisplaySessionProcessEvent(this, args); // Request post this.StartPostRequest(loopPostRequest, postUrl, listValues, cookies, httpSettings, state); #endregion } // return result; }
/// <summary> /// Executes the next safe request in order. /// </summary> /// <param name="state"> The HTTP state.</param> private void ExecuteNextSafeRequest(HttpState state) { // Get safe session and execute Session safeSession = this.SafeSession; int k = state.SessionRequestId; // http settings HttpProperties httpSettings = null; if ( safeSession.SessionRequests[k].RequestHttpSettings == null ) { httpSettings = safeSessionPostRequest.ClientSettings; } else { httpSettings = safeSession.SessionRequests[k].RequestHttpSettings; } if ( safeSession.SessionRequests[k].RequestType == HttpRequestType.GET ) { GetSessionRequest sessionRequest = (GetSessionRequest)safeSession.SessionRequests[k]; SessionCommandProcessEventArgs args = new SessionCommandProcessEventArgs("Requesting " + sessionRequest.Url.ToString()); args.ProcessType = SessionProcessType.SafeRequest; this.DisplaySessionProcessEvent(this, args); // Request, we only use url, http settings and cookies, because // IE doesn't returns and arraylist of values for GET requests. this.StartGetRequest(safeSessionGetRequest, sessionRequest.Url.ToString(), null, sessionRequest.RequestCookies, httpSettings, state); } else { PostSessionRequest sessionRequest = (PostSessionRequest)safeSession.SessionRequests[k]; SessionCommandProcessEventArgs args = new SessionCommandProcessEventArgs("Requesting " + sessionRequest.Url.ToString()); // TODO: Changed ArrayList listValues = parser.GetArrayList(sessionRequest.Form); string posted = ConvertToPostDataString(listValues); args.Detail = "Posted data: " + posted; args.ProcessType = SessionProcessType.SafeRequest; this.DisplaySessionProcessEvent(this, args); this.StartPostRequest(safeSessionPostRequest, sessionRequest.Url.ToString(), listValues, sessionRequest.RequestCookies, httpSettings, state); } }
/// <summary> /// Redirects to url. /// </summary> /// <param name="state"> The HTTP State.</param> /// <param name="cookies"> The cookie collection.</param> /// <param name="settings"> The HTTP Settings.</param> /// <param name="url"> The url to redirect to.</param> private void ApplyUrlRedirection(HttpState state, CookieCollection cookies,HttpProperties settings, string url) { this.DisplaySessionProcessEvent(this, new SessionCommandProcessEventArgs("Requesting " + url)); // Request, we only use url, http settings and cookies, because // IE doesn't returns and arraylist of values for GET requests. this.StartGetRequest(safeSessionGetRequest,url,null, cookies, settings, state); }
/// <summary> /// Apply the test requests for a session request. /// </summary> /// <param name="sessionRequest"> The session request.</param> /// <param name="result"> The response buffer result from the safe session.</param> private void ApplyRequestTests(SessionRequest sessionRequest, ResponseBuffer result) { UnitTestItem unitTestItem = sessionRequest.WebUnitTest; unitTestItem.Form = sessionRequest.Form; CookieCollection cookies = null; //int availableTests = this.AvailableTests(); //bool lastItem = false; string requestUrl = sessionRequest.Url.ToString(); #region Run each test in SessionRequest WebUnitTestItem // run each test in Form foreach (DictionaryEntry de in unitTestItem.Tests) { Test test = (Test)de.Value; ArrayList values = new ArrayList(); // get cookies cookies = cookieManager.GetCookies(sessionRequest.Url); // set current test index unitTestItem.SelectedTestIndex = unitTestItem.Tests.IndexOfValue(test); // create SessionCommandProcessEventArgs SessionCommandProcessEventArgs args = new SessionCommandProcessEventArgs("Applying test '" + test.Name + "' to " + sessionRequest.Url.ToString()); args.ProcessType = SessionProcessType.TestRequest; #region Apply Test // -------------------------------------------------------------------------------- // Process data // Html Form Tag if ( test.UnitTestDataType == UnitTestDataContainer.HtmlFormTag ) { // is a form tag // apply test to form HtmlFormTag filledForm = ApplyTestToForm(test, sessionRequest.Form.CloneTag()); values = parser.GetArrayList(filledForm, result.HttpBody, updateElementNames); } // Post Data Hashtable if ( test.UnitTestDataType == UnitTestDataContainer.PostDataHashtable ) { string postdata = ((PostSessionRequest)sessionRequest).PostData; // TODO: Change to PostDataCollection method. // convert post data to hashtable FormConverter converter = new FormConverter(); //Hashtable postDataCollection = converter.ConvertPostDataStringHashtable(postdata); PostDataCollection postDataCollection = converter.GetPostDataCollection(postdata); // Applies test to post data hashtable PostDataCollection filledPostData = ApplyTestToPostData(test, postDataCollection.Clone()); values = converter.GetArrayList(filledPostData); } // Cookies if ( test.UnitTestDataType == UnitTestDataContainer.Cookies ) { cookies = ApplyTestToCookies(test, cookies); } // Url if( test.UnitTestDataType == UnitTestDataContainer.NoPostData ) { // a url test requestUrl = ApplyTestToUrl(test, WebServerUriType.Normal,sessionRequest.Url).ToString(); } // ----------------------------------------------------------------------------------- #endregion if ( (test.UnitTestDataType == UnitTestDataContainer.HtmlFormTag ) || ( test.UnitTestDataType == UnitTestDataContainer.PostDataHashtable ) ) { // Set post data for report test.Arguments.PostData = ConvertToPostDataString(values); args.Detail = "Posted Data:" + test.Arguments.PostData; } if ( test.UnitTestDataType == UnitTestDataContainer.NoPostData ) { args.Detail = "Url query:" + requestUrl; } if ( test.UnitTestDataType == UnitTestDataContainer.Cookies ) { StringBuilder cookieQuery = new StringBuilder(); foreach ( Cookie cky in cookies ) { cookieQuery.Append("Name:" + cky.Name); cookieQuery.Append(", "); cookieQuery.Append("Value:" + cky.Value); cookieQuery.Append(";"); } args.Detail = "Cookie:" + cookieQuery.ToString(); } // // set last item flag // if ( availableTests == 1) // { // lastItem = true; // } // display the current processing this.DisplaySessionProcessEvent(this,args); // clone test item and set last item value HttpState httpRequestState = new HttpState(); httpRequestState.TestItem = unitTestItem.Clone(); //httpRequestState.IsLastItem = lastItem; // http settings HttpProperties httpSettings = null; if ( sessionRequest.RequestHttpSettings == null ) { httpSettings = unitTestGetRequest.ClientSettings; } else { httpSettings = sessionRequest.RequestHttpSettings; } if ( sessionRequest.RequestType == HttpRequestType.GET ) { // get request this.StartGetRequest(unitTestGetRequest, requestUrl, null, cookies, httpSettings, httpRequestState); } else if ( sessionRequest.RequestType == HttpRequestType.POST ) { // post request this.StartPostRequest(unitTestPostRequest, requestUrl, values, cookies, httpSettings, httpRequestState); } //availableTests--; } #endregion }
/// <summary> /// Executes the session. /// </summary> public void Run() { this._isRunning = true; reports = new ArrayList(); unitTestPostRequest = new PostForm(); unitTestGetRequest = new GetForm(); safeSessionGetRequest = new GetForm(); safeSessionPostRequest = new PostForm(); loopPostRequest = new PostForm(); loopGetRequest = new GetForm(); // Add proxy settings loopPostRequest.ProxySettings = this.Proxy; loopGetRequest.ProxySettings = this.Proxy; unitTestPostRequest.ProxySettings = this.Proxy; unitTestGetRequest.ProxySettings = this.Proxy; safeSessionGetRequest.ProxySettings = this.Proxy; safeSessionPostRequest.ProxySettings = this.Proxy; // http settings loopPostRequest.ClientSettings = this.ProtocolProperties; loopGetRequest.ClientSettings = this.ProtocolProperties; unitTestPostRequest.ClientSettings = this.ProtocolProperties; unitTestGetRequest.ClientSettings = this.ProtocolProperties; safeSessionGetRequest.ClientSettings = this.ProtocolProperties; safeSessionPostRequest.ClientSettings = this.ProtocolProperties; // set events for looping requests loopPostRequest.EndHttp += new ResponseCallbackDelegate(LoopToNextSafeRequest_EndHttp); loopGetRequest.EndHttp += new ResponseCallbackDelegate(LoopToNextSafeRequest_EndHttp); // set events for unit test requests unitTestPostRequest.EndHttp += new ResponseCallbackDelegate(UnitTestResult_EndHttp); unitTestGetRequest.EndHttp += new ResponseCallbackDelegate(UnitTestResult_EndHttp); // set events for safe session requests safeSessionGetRequest.EndHttp += new ResponseCallbackDelegate(SafeSessionResult_EndHttp); safeSessionPostRequest.EndHttp += new ResponseCallbackDelegate(SafeSessionResult_EndHttp); HttpState state = new HttpState(); // the test sessin request of the safe request. state.TestSessionRequest = this.TestSession.SessionRequests[0]; state.SessionRequestId = 0; state.IsLastItem = true; ExecuteNextSafeRequest(state); }
/// <summary> /// PacketStateData Constructor. /// </summary> /// <param name="state"> The HttpState associated with the request.</param> /// <param name="response"> The HttpWebResponse.</param> /// <param name="message"> The error message.</param> public PacketStateData(HttpState state,HttpWebResponse response,string message) { this.HttpStateData = state; this.WebResponse = response; this.ErrorMessage = message; }
/// <summary> /// Runs the command. /// </summary> public void Run() { this._isRunning = true; postRequest = new PostForm(); getRequest = new GetForm(); postRequest.EndHttp += new ResponseCallbackDelegate(httpResponse_EndHttp); getRequest.EndHttp += new ResponseCallbackDelegate(httpResponse_EndHttp); reports = new ArrayList(); TestCollection tests = GetTests(); UnitTestItem testItem = new UnitTestItem(FormTag, tests); int availableTests = tests.Count; bool lastItem = false; #region Run each test in UnitTestItem // run each test in Form foreach (DictionaryEntry de in tests) { Test test = (Test)de.Value; // apply test to form HtmlFormTag filledForm = ApplyTestToForm(test, FormTag.CloneTag()); // set current test index testItem.SelectedTestIndex = testItem.Tests.IndexOfValue(test); // resolve uri string url = UriResolver.ResolveUrl(this.Url,filledForm.Action); // convert to array list // TODO: Send HTML Source for bypassing fields. Will be needed for ASP.NET testing. ArrayList al = parser.GetArrayList(filledForm); // set posted data StringBuilder postDataBuffer = new StringBuilder(); postDataBuffer.Append("?"); for (int k=0;k<al.Count;k++) { postDataBuffer.Append(al[k]); postDataBuffer.Append("&"); } test.Arguments.PostData = postDataBuffer.ToString(); // set last item flag if ( availableTests == 1) { lastItem = true; } CookieManager cookieManager = new CookieManager(); CookieCollection cookies = cookieManager.GetCookies(new Uri(url)); HttpState httpRequestState = new HttpState(); httpRequestState.TestItem = testItem.Clone(); httpRequestState.IsLastItem = lastItem; if ( filledForm.Method.ToLower(System.Globalization.CultureInfo.InvariantCulture) == "get" ) { getRequest.StartAsyncHttpGet( url, this.ProtocolProperties, al, cookies, httpRequestState, false); } else { postRequest.StartAsyncHttpPost( url, this.ProtocolProperties, al, cookies, httpRequestState); } availableTests--; } #endregion }