使用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());
}
});
}
}
}