2017-02-24 983 views
2

我试图找出如何发送数据直接发送到一个URL与cefsharp。 这里是什么,我想送一个例子:发送POST数据到URL与CefSharp C#

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

,这将创造thing1=hello&thing2=world 我想这个POST数据发送到使用与cefsharp现有浏览器的URL http://example.com/mydata.php

从我所看到的

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

没有办法附加POST数据,是有办法,我能做到这一点?

基本上,我需要让浏览器已经拥有相同的饼干,所以如果有另一种方式来使用的HttpWebRequest与cefsharp ChromiumWebBrowser Cookie,然后请求之后再次同步它们例如做到这一点,这也将工作,但我不确定这是否可能。

+0

扩展方法http://cefsharp.github.io/api/55.0.0/html/M_CefSharp_IFrame_LoadRequest.htm – amaitland

回答

2

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

例如,你可以实现微软的System.Windows.Forms.WebBrowser.Navigate(...,字节[] POSTDATA,串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); 
    } 
+0

不需要从ChromiumWebBrowser继承。你可以很容易地使这个扩展方法。将数据转换为字符串实际上将使用默认编码器将其转换回字节数组,您可以使用https://github.com/cefsharp/CefSharp/blob/cd934267c65f494ceb9ee75995cd2a1ca0954543/CefSharp/PostDataExtensions.cs#L128你应该直接设置数据。 – amaitland

+0

如何直接设置数据? – jwezorek

+0

是这样的: request.InitializePostData(); var postData = request.PostData; var element = postData.CreatePostDataElement(); element.Bytes = postDataBytes; request.PostData.AddElement(element); ? – jwezorek