2013-04-13 4 views
2

방금 ​​awesomium을 사용하기 시작했습니다. 사용자 에이전트와 참조자를 변경하는 방법을 알고 싶었습니다. 내가 예를 들어 5 istance o awesomium webcontrol을 초기화하고 각기 다른 사용자 에이전트와 다른 리퍼러가 필요합니다. 이 내 간단한 코드이 2 줄에 오류가 줄Awesomium, 사용자 에이전트 및 참조 자 변경

 private void newbrowser() 
    { 
      browser = new Awesomium.Windows.Forms.WebControl(); 
      browser.Paint += browser_Paint; 
      browser.Location = new System.Drawing.Point(1, 1); 
      browser.Name = "webControl"; 
      browser.Size = new System.Drawing.Size(1024, 768); 
      browser.Source = new System.Uri("https://www.google.com/", System.UriKind.Absolute); 
      browser.TabIndex = 0; 

    } 

    void browser_Paint(object sender, PaintEventArgs e) 
    { 
     browser.Paint -= browser_Paint; 

     System.Collections.Specialized.NameValueCollection myCol = 
      new System.Collections.Specialized.NameValueCollection(); 
     myCol.Add("Referer", "http://www.yahoo.com"); 

     browser.SetHeaderDefinition("MyHeader", myCol); 
     browser.AddHeaderRewriteRule("http://*", "MyHeader"); 
    } 
    private void button1_Click(object sender, EventArgs e) 
    { 
     newbrowser(); 
    } 

 browser.SetHeaderDefinition("MyHeader", myCol); 
     browser.AddHeaderRewriteRule("http://*", "MyHeader"); 

오류 1 'Awesomium.Windows.Forms.WebControl은'SetHeaderDefinition ' 에 대한 정의가 포함되어 있지 않습니다 오류 1 'Awesomium.Windows.Forms.WebControl'에 'AddHeaderRewriteRule'에 대한 정의가 없습니다.

감사합니다.

답변

7

WebControl을 관리하는 WebCore의 사용자 에이전트를 설정해야합니다. WebControl을 만들기 전에이 작업을 수행해야합니다.

public WebForm() 
{ 
    if (!WebCore.IsRunning) 
     WebCore.Initialize(new WebConfig() { UserAgent = "YourUserAgent" }); 

    InitializeComponent(); 
} 
1

내 솔루션 - IResourceInterceptor를 구현하고 추가 헤더를 탐색 할 수 있습니다 웹 브라우저 주위에 래퍼 :

public class class BrowserWrapper : IResourceInterceptor 
{ 
    public BrowserWrapper() 
    { 
     WebCore.ResourceInterceptor = this; 
     //BrowserWrapper can contains WebBrowser or knows how to delegate him Naviagtion (Source property) 
    } 

    private readonly ConcurrentDictionary<Uri, string> headers = new ConcurrentDictionary<Uri, string>(); 

    public void Navigate(Uri uri, string additionalHeaders = null) 
    { 
     if (additionalHeaders != null) headers.AddOrUpdate(uri, additionalHeaders, (url, h) => h); 
     //Navigation to browser (WebControl.Source = uri...) 
    } 

    ResourceResponse IResourceInterceptor.OnRequest(ResourceRequest request) 
    { 
     string h; 
     if (headers.TryRemove(request.Url, out h)) 
     { 
      var hs = h.Split(':'); 
      request.AppendExtraHeader(hs[0], hs[1]); 
     } 
     return null; 
    } 

    bool IResourceInterceptor.OnFilterNavigation(NavigationRequest request) 
    { 
     return false; 
    } 
}