예제 #1
0
        private async void btnGO_Click(object sender, EventArgs e)
        {
            txtResponse.ReadOnly           = false;
            txtResponse.Lexer              = Lexer.Container;
            txtResponse.Text               = string.Empty;
            txtResponse.ReadOnly           = true;
            gridResponseHeaders.DataSource = new BindingList <Header>();
            var reqResp = new RequestResponse();

            reqResp.URL    = txtURL.Text;
            reqResp.Method = cboMethod.Text;
            if (reqResp.Method.ToLower() != "get")
            {
                reqResp.RequestBody = txtRequestBody.Text;
            }
            reqResp.RequestDate           = DateTime.Now;
            reqResp.StatusCode            = -1;
            reqResp.UseDefaultCredentials = chkUseDefaultCredentials.Checked;
            (gridRequestsResponses.DataSource as BindingList <RequestResponse>).Insert(0, reqResp);
            gridRequestsResponses.ClearSelection();
            gridRequestsResponses.Rows[0].Selected = true;
            HttpWebResponse response  = null;
            Exception       exception = null;
            DateTime?       start     = null;

            progMain.Style = ProgressBarStyle.Marquee;
            try
            {
                var req = WebRequest.Create(txtURL.Text) as HttpWebRequest;
                req.UserAgent             = "PaJaMa WebRequestor";
                req.Accept                = "*/*";
                req.KeepAlive             = true;
                req.Method                = cboMethod.Text;
                req.UseDefaultCredentials = chkUseDefaultCredentials.Checked;
                foreach (DataGridViewRow hdr in gridRequestHeaders.Rows)
                {
                    if (hdr.DataBoundItem == null)
                    {
                        continue;
                    }
                    var header = (hdr.DataBoundItem as Header).Clone();
                    reqResp.RequestHeaders.Add(header);
                    if (header.Name.ToLower() == "content-type")
                    {
                        req.ContentType = header.Value;
                    }
                    else
                    {
                        req.Headers.Add(header.Name, header.Value);
                    }
                }
                start = DateTime.Now;
                if (cboMethod.Text != "GET" && !string.IsNullOrEmpty(txtRequestBody.Text))
                {
                    var stream = req.GetRequestStream();
                    var bytes  = Common.Common.GetBytesFromString(txtRequestBody.Text);
                    stream.Write(bytes, 0, bytes.Length);
                    stream.Close();
                }
                response = (HttpWebResponse)await req.GetResponseAsync();
            }
            catch (WebException we)
            {
                response = (HttpWebResponse)we.Response;
                if (response == null)
                {
                    exception = we;
                }
            }
            catch (Exception ex)
            {
                exception = ex;
            }

            progMain.Style = ProgressBarStyle.Continuous;

            if (start != null)
            {
                reqResp.Duration = (int)Math.Round((DateTime.Now - start.Value).TotalMilliseconds);
            }

            if (exception != null)
            {
                reqResp.StatusCode = 0;
                writeResponse(reqResp, exception.Message);
            }
            else if (response != null)
            {
                reqResp.StatusCode = (int)response.StatusCode;
                writeResponse(reqResp, Common.Common.GetStringFromStream(response.GetResponseStream()).Trim('\0').Trim());
                foreach (var k in response.Headers.AllKeys)
                {
                    reqResp.ResponseHeaders.Add(new Header()
                    {
                        Name = k, Value = response.Headers[k]
                    });
                }

                gridResponseHeaders.DataSource = reqResp.ResponseHeaders;
            }

            gridRequestsResponses.Invalidate();
            Workspace.RequestResponses.Insert(0, reqResp);
            File.WriteAllText(WorkspacePath + ".json", JsonConvert.SerializeObject(Workspace));
            _current = reqResp.Clone();
            duplicate(_current);
            populateOutputControl(_current);

            tabRequestResponse.SelectedTab = pageResponse;
            setTabText();
        }