工作cefsharp POST示例

时间:2018-04-18 00:06:51

标签: c# chromium chromium-embedded cefsharp

使用cefsharp / ChromiumWebBrowser很难获得HTTP POST请求/响应。我无法在Stackoverflow上找到工作示例,也无法在文档中找到。想看看是否有人有完整的例子?如果可以使用Navigate功能(如一个示例中所示),或者需要使用处理程序/架构完成,我就会坚持下去。

我正在尝试对PHP脚本进行基本POST。如果data1 / data2与输入匹配,则返回json状态:成功,否则失败。我在devtools中看到html正文以json成功返回,但这段代码返回或什么也没有。我尝试过不同的方法来获取响应数据。我想获取要回顾的C#代码的JSON响应。当然应该有一个简单的方法来实现这一目标?我想发送一个HTTP请求,然后让身体(json)解析。如果这需要架构/处理程序,我找不到使用它的完整示例。

namespace BrowserTest
{
    public partial class MainForm : Form
    {
        ChromiumWebBrowser browser = null;

        public Loader()
        {
            browser = new ChromiumWebBrowser("http://localhost/test/"); // Initialize to this page
            pBrowserLogin.Controls.Add(browser);
        }

        private void btnTest_Click(object sender, EventArgs e)
        {
            byte[] request = Encoding.ASCII.GetBytes("data1=" + txtData1.Text + "&data2=" + txtData2.Text);
            PostTest.Navigate(browser, "http://localhost/test/posttest.php", request, "application/x-www-form-urlencoded");
        }
    }
    public static class PostTest
    {
        public static void Navigate(this IWebBrowser browser, string url, byte[] postDataBytes, string contentType)
        {
            IFrame frame = browser.GetMainFrame();
            IRequest request = frame.CreateRequest();

            request.Url = url;
            request.Method = "POST";

            request.InitializePostData();
            var element = request.PostData.CreatePostDataElement();
            element.Bytes = postDataBytes;
            request.PostData.AddElement(element);

            NameValueCollection headers = new NameValueCollection();
            headers.Add("Content-Type", contentType);
            request.Headers = headers;

            frame.LoadRequest(request);

            frame.GetTextAsync().ContinueWith(taskHtml =>
            {
                var html = taskHtml.Result;
                System.Windows.Forms.MessageBox.Show(html);
            });

            string script = string.Format("document.documentElement.outerHTML;");
            frame.EvaluateScriptAsync(script).ContinueWith(x =>
            {
                var response = x.Result;

                if (response.Success && response.Result != null)
                {
                    var fullhtml = response.Result;
                    System.Windows.Forms.MessageBox.Show(fullhtml.ToString());
                }
            });
        }
    }
}    

0 个答案:

没有答案