2015-07-06 16 views
5

Veya ChromiumWebBrowser'ın bir örneğini yeni oluştururken, bir siteye ilk istekte bulunan özel bir üstbilgi nasıl enjekte edilir.krom - ilk sayfa yüklenirken özel başlık bilgisi gönder C#

Chromium ile bir noob'um ve gerçekten biraz yardım alabilirim. CEF pencereli bir winform uygulaması var. K, şimdiye kadar hiç prob yok. Yapmam gereken şey, ilk URL’yi kimlik doğrulama bilgisi içeren özel bir http-başlık ile çağırmak/yüklemek. Mümkün mü?

şudur aslında oynayan ve tüm parçaları Özel başlıklı hariç çalışmak Ne (Doh!)

Winform [asla alır bu noktanın ötesine] => C# MVC web (CEF HTTPRequest() Özel başlıklı) app => Owin_Authentication_Pipeline segment => Dolgulu Razor görünümü ile MVC Yanıtı => Winform Chromium uygulamasında görünür.

Belki bu da yardımcı olacaktır:

using CefSharp; 
using CefSharp.WinForms; 
... 
private void Form1_Load(object sender, EventArgs e) 
{ 
    Cef.Initialize(); 
    ChromiumWebBrowser myBrowser = new ChromiumWebBrowser("whatever.com"); 
    // ??How do i get a custom header be sent with the above line?? 

    myBrowser.Dock = DockStyle.Fill; 
    //myBrowser.ShowDevTools(); 
    //myBrowser.RequestHandler = new DSRequestHander(); 
    //myBrowser.FrameLoadStart += myBrowser_FrameLoadStart; 
    this.Controls.Add(myBrowser); 
} 

ben baktım, ölüme bu Groggled benim alet bütün hileleri denenmiş ve sonra bazı.

Bu boggler'ı nasıl çözebileceğimi veya etrafından dolaşabileceğimiz hakkında herhangi bir fikir, yardım veya ipucu büyük beğeni topluyor. Şimdiden teşekkürler.

+1

CEFSharp projesini kullanıyor musunuz? https://github.com/cefsharp/CefSharp/wiki – NinjaMid76

+0

@ NinjaMid76 Evet, evet öyleyim. – JackJack

+0

Daha fazla bilgi paylaşmazsanız size yardımcı olma imkansızdır. Bu bileşen zincirinde ne kadar uzak olduğunuzda, özel üstbilginiz alır. Owin_Authentication_Pipeline segmentinde görünüyor mu? Onu reddetti mi? Vb. Bize denediğiniz şeyin bazı basit hata ayıklama bilgilerini sağlayın. İyi stackoverflow soruları bir [MVCE] var (http://stackoverflow.com/help/mcve) – jornh

cevap

6

IRequestHandler'u uygulayın ve atayın. yöntem sonra sen, başlıklar okuma özelliği değişiklikler sonra yeniden atamak yapmalısınız haliyle bir temel örnek

bool IRequestHandler.OnBeforeResourceLoad(IWebBrowser browser, IRequest request, IResponse response) 
{ 
    var headers = request.Headers; 
    headers["Custom-Header"] = "My Custom Header"; 
    request.Headers = headers; 
    return false; 
} 

gibi görünmelidir, OnBeforeResourceLoad olmalıdır.

+0

ChromiumWebBrowser öğesinden devralınan bir CustomChromeBrowser sınıfı oluşturdum ve CustomChromeBrowser sınıfının Initialized olayı aracılığıyla bir RequestHandler sınıfı (demo projesiyle birlikte gelir) atadım. – CodingYourLife

+0

Tüm Handheld'lar basit özelliklerdir, bunları yapıcıya atamak yeterli olur. – amaitland

+0

Daha fazla detay alabilir miyiz, ben de aynı sorunum var ve önerilerinizi nasıl yapacağınızı bilmiyorum. – Psddp

3

IRequestHandler uygulayan bir sınıf oluşturmanız ve ardından bu nesnenin bir örneğini tarayıcı nesnesine RequestHandler olarak ayarlamanız gerekir. sürümü 53 ile

, o sınıf aşağıdaki gibi görünmelidir: Sonra

class ChromeBrowserRequestHandler: IRequestHandler 
    { 
     public bool GetAuthCredentials(IWebBrowser browserControl, IBrowser browser, IFrame frame, bool isProxy, string host, int port, string realm, string scheme, IAuthCallback callback) 
     { 
      return false; 
     } 

     public bool OnBeforeBrowse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, bool isRedirect) 
     { 
      return false; 
     } 

     public bool OnBeforePluginLoad(IWebBrowser browser, string url, string policyUrl, WebPluginInfo info) 
     { 
      return false; 
     } 

     public CefReturnValue OnBeforeResourceLoad(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback) 
     { 
      var headers = request.Headers; 
      headers["Custom-Header"] = "My Custom Header"; 
      request.Headers = headers; 

      return CefReturnValue.Continue; 
     } 

     public bool OnCertificateError(IWebBrowser browser, CefErrorCode errorCode, string requestUrl) 
     { 
      return false; 
     } 

     public void OnPluginCrashed(IWebBrowser browser, string pluginPath) 
     { 
     } 

     public void OnRenderProcessTerminated(IWebBrowser browserControl, IBrowser browser, CefTerminationStatus status) 
     { 
     } 

     public IResponseFilter GetResourceResponseFilter(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response) 
     { 
      return null; 
     } 

     public bool OnCertificateError(IWebBrowser browserControl, IBrowser browser, CefErrorCode errorCode, string requestUrl, ISslInfo sslInfo, IRequestCallback callback) 
     { 
      return false; 
     } 

     public bool OnOpenUrlFromTab(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, WindowOpenDisposition targetDisposition, bool userGesture) 
     { 
      return false; 
     } 

     public void OnPluginCrashed(IWebBrowser browserControl, IBrowser browser, string pluginPath) 
     { 
     } 

     public bool OnProtocolExecution(IWebBrowser browserControl, IBrowser browser, string url) 
     { 
      return false; 
     } 

     public bool OnQuotaRequest(IWebBrowser browserControl, IBrowser browser, string originUrl, long newSize, IRequestCallback callback) 
     { 
      return false; 
     } 

     public void OnRenderViewReady(IWebBrowser browserControl, IBrowser browser) 
     { 
     } 

     public void OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) 
     { 
     } 

     public void OnResourceRedirect(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, ref string newUrl) 
     { 
     } 

     public bool OnResourceResponse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response) 
     { 
      return false; 
     } 
    } 

, tarayıcı nesne oluşturulurken: istek işleyicisi sayfaya yüklemeden önce ayarlanması gerektiğini

ChromiumWebBrowser myBrowser = new ChromiumWebBrowser("whatever.com") 
{ 
    RequestHandler = new ChromeBrowserRequestHandler() 
}; 

Not. Instanctiaction sırasında istek işleyicisini ayarlayamazsanız, daha sonra myBrowser.Load("whatever.com") ile sayfayı yeniden yükleyebilirsiniz.

İlgili konular