Отправить данные POST на URL с помощью CefSharp C#

Я пытаюсь понять, как отправить данные поста непосредственно на URL с помощью cefsharp. Вот пример того, что я хочу отправить:

var values = new Dictionary<string, string>
{
     { "thing1", "hello" },
     { "thing2", "world" }
};
FormUrlEncodedContent content = new FormUrlEncodedContent(values);

Который создаст thing1=hello&thing2=worldЯ хочу отправить эти данные POST на URL http://example.com/mydata.php используя существующий браузер с cefsharp.

Из того, что я вижу

browser.Load("http://example.com/mydata.php");

Нет способа прикрепить данные POST, есть ли способ сделать это?

По сути, мне нужно сохранить те же файлы cookie, которые уже есть в браузере, поэтому, если есть другой способ сделать это, например, использовать HttpWebRequest с файлами cookie cefsharp ChromiumWebBrowser, а затем синхронизировать их снова после этого запроса, это также будет работать, но я не уверен, что это возможно.

1 ответ

Решение

Вы можете выдать POST с помощью CefSharp через метод LoadRequest интерфейса IFrame.

Например, вы можете создать метод расширения, который реализует эквивалент Microsoft System.Windows.Forms.WebBrowser.Navigate(..., byte[] postData, string AdditionalHeaders) с чем-то вроде

public 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);
    }
Другие вопросы по тегам