Опубликовать параметры данных с помощью URL в Cefsharp ChromiumWebBrowser - PullRequest
0 голосов
/ 13 апреля 2020

Я использую веб-интерфейс в приложении c# windows, использующем библиотеки Cefsharp. Я могу загрузить свою вкладку в браузере, используя следующий код

        Cef.EnableHighDPISupport();
        CefSettings settings = new CefSettings();         
        Cef.Initialize(settings);            
        chromeBrowser = new ChromiumWebBrowser("http://localhost/myproject/login.php"); 
        tab_web.Controls.Add(chromeBrowser);

Но я не могу опубликовать учетные данные для входа на страницу (метод - 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 прилагается In this the data posted is embedded in the data arrayenter image description here

Между тем отправка данных формы должна быть следующим the username and password data is attached to the form array

Я изменил тип содержимого на multipart / form-data, text, xml, et c. мне ничего не помогло.

1 Ответ

0 голосов
/ 17 апреля 2020

Кредит 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

...