使用 CefSharp C# 将 POST 数据发送到 URL

Posted

技术标签:

【中文标题】使用 CefSharp C# 将 POST 数据发送到 URL【英文标题】:Send POST data to URL with CefSharp C# 【发布时间】:2017-07-15 21:56:22 【问题描述】:

我正在尝试研究如何使用 cefsharp 将帖子数据直接发送到 url。 这是我要发送的示例:

var values = new Dictionary<string, string>

      "thing1", "hello" ,
      "thing2", "world" 
;
FormUrlEncodedContent content = new FormUrlEncodedContent(values);

这将创建thing1=hello&amp;thing2=world 我想使用带有 cefsharp 的现有浏览器将此 POST 数据发送到 url http://example.com/mydata.php

据我所知

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

无法附加 POST 数据,有什么办法可以做到吗?

基本上我需要保留浏览器已经拥有的相同 cookie,所以如果有另一种方法可以做到这一点,例如使用带有 cefsharp ChromiumWebBrowser cookie 的 HttpWebRequest 然后在该请求之后再次同步它们,那也可以,但我'不确定这是否可能。

【问题讨论】:

cefsharp.github.io/api/55.0.0/html/… 【参考方案1】:

您可以通过 IFrame 接口的 LoadRequest 方法使用 CefSharp 发出 POST。

例如,您可以创建一个扩展方法来实现与 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);
    

【讨论】:

不需要从 ChromiumWebBrowser 继承。您可以轻松地将其作为扩展方法。将数据转换为字符串实际上是使用默认编码器将其转换回字节数组,当您应该直接设置数据时使用github.com/cefsharp/CefSharp/blob/…。 如何直接设置数据? 像这样:request.InitializePostData(); var postData = request.PostData; var element = postData.CreatePostDataElement(); element.Bytes = postDataBytes; request.PostData.AddElement(element); ?

以上是关于使用 CefSharp C# 将 POST 数据发送到 URL的主要内容,如果未能解决你的问题,请参考以下文章

C# 可以将窗体中嵌入的cefSharp浏览器页面元素值变化做成窗体可用的事件吗?

使用CefSharp在C#访问网站,支持x86和x64

C# CefSharp如何在Winforms应用程序中使用

使用CEfSharp之旅拦截网络请求 截取get post response返回

wpf中js调用C#后台方法,使用框架CefSharp

使用 CefSharp WPF 在 C# 上执行 JavaScript 会导致错误