2017-02-24 148 views
2

cefsharpを使用して投稿データをURLに直接送信する方法を試しています。CefSharpでURLにPOSTデータを送信するC#

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

私はcefsharpと、既存のブラウザを使用して、URL http://example.com/mydata.phpにこのPOSTデータを送信したいthing1=hello&thing2=world を作成します。 は、ここで私が送信したいものの一例です。

私は

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

は、POSTデータを添付する方法はありません見ることができるものから、私はこれを行うことができます方法はありますか?

基本的には、ブラウザに既に存在するものと同じCookieを保持する必要があります。たとえば、HttpWebRequestをcefsharp ChromiumWebBrowserのCookieとともに使用し、その要求の後で再び同期する別の方法がある場合、私はそれが可能かどうか分からない。

+0

のようなもので、MicrosoftのSystem.Windows.Forms.WebBrowser.Navigate(...、バイト[] POSTDATA、文字列additionalHeaders)と同等のものを実装して拡張メソッドを作ることができますhttp://cefsharp.github.io/api/55.0.0/html/M_CefSharp_IFrame_LoadRequest.htm – amaitland

答えて

2

CefSharpを使用してPOSTを発行するには、IFrameインターフェイスのLoadRequestメソッドを使用します。

たとえば、あなたは

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要素= postData.CreatePostDataElement(); element.Bytes = postDataBytes; request.PostData.AddElement(element); ? – jwezorek

関連する問題