Post Cefsharp chromiumwebbrowser 中的 url 数据参数
Post data parameters with url in Cefsharp chromiumwebbrowser
我在我的 c# 中使用 Web 界面 windows 使用 Cefsharp 的表单应用程序 libraries.I 可以使用以下代码通过浏览器加载我的标签页
Cef.EnableHighDPISupport();
CefSettings settings = new CefSettings();
Cef.Initialize(settings);
chromeBrowser = new ChromiumWebBrowser("http://localhost/myproject/login.php");
tab_web.Controls.Add(chromeBrowser);
但我无法post 页面的登录凭据(方法是 POST),因此我可以注册会话,用户可以直接从应用程序访问他的个人资料。
更新
public partial class Form1 : Form
{
public void InitializeChromium()
{
Cef.EnableHighDPISupport();
CefSettings settings = new CefSettings();
settings.RemoteDebuggingPort = 8088;
Cef.Initialize(settings);
ChromiumWebBrowser chromeBrowser = new ChromiumWebBrowser("http://localhost/test.php");
chromeBrowser.RequestHandler = new CustomRequestHandler();
tab_web.Controls.Add(chromeBrowser);
chromeBrowser.Dock = DockStyle.Fill;
}
public Form1()
{
InitializeComponent();
InitializeChromium();
}
public void load_browser()
{
ChromiumWebBrowser chromeBrowser = new ChromiumWebBrowser();
byte[] request = Encoding.ASCII.GetBytes("data1=sssss&data2=sssss");
PostTest.Navigate( chromeBrowser, "http://localhost/test.php", request, "application/x-www-form-urlencoded");
tab_gis.Controls.Add(chromeBrowser);
}
}
public class CustomRequestHandler : CefSharp.Handler.RequestHandler
{
protected override IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling)
{
if (request.Url == "http://localhost/test.php")
{
return new CustomResourceRequestHandler();
}
return null;
}
}
public class CustomResourceRequestHandler : CefSharp.Handler.ResourceRequestHandler
{
protected override CefReturnValue OnBeforeResourceLoad(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
{
var postData = new PostData();
MessageBox.Show("HHHH");
postData.AddData("test=123&data2=456");
request.Method = "POST";
request.PostData = postData;
return CefReturnValue.Continue;
}
}
httpbin 的回复截图如附件
同时表单数据提交应该如下
我将内容类型更改为 multipart/form-data、文本、xml 等。没有任何帮助。
归功于 Amaitland。他通过例子给出了必要的指导,通过这些例子我得到了这个问题的解决方案。我在这里发布工作代码以帮助任何其他 Cefsharp 用户。
public class CustomRequestHandler : CefSharp.Handler.RequestHandler
{
protected override IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling)
{
//Where possible only intercept specific Url's
//Load http://httpbin.org/post in the browser and you'll
//see the post data
if (request.Url == "http://httpbin.org/post")
{
return new CustomResourceRequestHandler();
}
//Default behaviour, url will be loaded normally.
return null;
}
}
public class CustomResourceRequestHandler : CefSharp.Handler.ResourceRequestHandler
{
protected override CefReturnValue OnBeforeResourceLoad(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
{
//Modify the request to add post data
//Make sure to read https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST
var postData = new PostData();
postData.AddData("test=123&data=456");
request.Method = "POST";
request.PostData = postData;
//Set the Content-Type header to whatever suites your requirement
request.SetHeaderByName("Content-Type", "application/x-www-form-urlencoded", true);
//Set additional Request headers as required.
return CefReturnValue.Continue;
}
}
//Load http://httpbin.org/post in the browser to see the post data
browser = new ChromiumWebBrowser("http://httpbin.org/post");
browser.RequestHandler = new CustomRequestHandler();
详情请参考
https://github.com/cefsharp/CefSharp/wiki/General-Usage#load-url-with-postdata
我在我的 c# 中使用 Web 界面 windows 使用 Cefsharp 的表单应用程序 libraries.I 可以使用以下代码通过浏览器加载我的标签页
Cef.EnableHighDPISupport();
CefSettings settings = new CefSettings();
Cef.Initialize(settings);
chromeBrowser = new ChromiumWebBrowser("http://localhost/myproject/login.php");
tab_web.Controls.Add(chromeBrowser);
但我无法post 页面的登录凭据(方法是 POST),因此我可以注册会话,用户可以直接从应用程序访问他的个人资料。 更新
public partial class Form1 : Form
{
public void InitializeChromium()
{
Cef.EnableHighDPISupport();
CefSettings settings = new CefSettings();
settings.RemoteDebuggingPort = 8088;
Cef.Initialize(settings);
ChromiumWebBrowser chromeBrowser = new ChromiumWebBrowser("http://localhost/test.php");
chromeBrowser.RequestHandler = new CustomRequestHandler();
tab_web.Controls.Add(chromeBrowser);
chromeBrowser.Dock = DockStyle.Fill;
}
public Form1()
{
InitializeComponent();
InitializeChromium();
}
public void load_browser()
{
ChromiumWebBrowser chromeBrowser = new ChromiumWebBrowser();
byte[] request = Encoding.ASCII.GetBytes("data1=sssss&data2=sssss");
PostTest.Navigate( chromeBrowser, "http://localhost/test.php", request, "application/x-www-form-urlencoded");
tab_gis.Controls.Add(chromeBrowser);
}
}
public class CustomRequestHandler : CefSharp.Handler.RequestHandler
{
protected override IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling)
{
if (request.Url == "http://localhost/test.php")
{
return new CustomResourceRequestHandler();
}
return null;
}
}
public class CustomResourceRequestHandler : CefSharp.Handler.ResourceRequestHandler
{
protected override CefReturnValue OnBeforeResourceLoad(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
{
var postData = new PostData();
MessageBox.Show("HHHH");
postData.AddData("test=123&data2=456");
request.Method = "POST";
request.PostData = postData;
return CefReturnValue.Continue;
}
}
httpbin 的回复截图如附件
同时表单数据提交应该如下
我将内容类型更改为 multipart/form-data、文本、xml 等。没有任何帮助。
归功于 Amaitland。他通过例子给出了必要的指导,通过这些例子我得到了这个问题的解决方案。我在这里发布工作代码以帮助任何其他 Cefsharp 用户。
public class CustomRequestHandler : CefSharp.Handler.RequestHandler
{
protected override IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling)
{
//Where possible only intercept specific Url's
//Load http://httpbin.org/post in the browser and you'll
//see the post data
if (request.Url == "http://httpbin.org/post")
{
return new CustomResourceRequestHandler();
}
//Default behaviour, url will be loaded normally.
return null;
}
}
public class CustomResourceRequestHandler : CefSharp.Handler.ResourceRequestHandler
{
protected override CefReturnValue OnBeforeResourceLoad(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
{
//Modify the request to add post data
//Make sure to read https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST
var postData = new PostData();
postData.AddData("test=123&data=456");
request.Method = "POST";
request.PostData = postData;
//Set the Content-Type header to whatever suites your requirement
request.SetHeaderByName("Content-Type", "application/x-www-form-urlencoded", true);
//Set additional Request headers as required.
return CefReturnValue.Continue;
}
}
//Load http://httpbin.org/post in the browser to see the post data
browser = new ChromiumWebBrowser("http://httpbin.org/post");
browser.RequestHandler = new CustomRequestHandler();
详情请参考 https://github.com/cefsharp/CefSharp/wiki/General-Usage#load-url-with-postdata