【问题标题】:Awesomium, change useragent and referrerAwesomium,更改用户代理和推荐人
【发布时间】:2023-04-09 05:08:01
【问题描述】:

我刚开始使用 awesomium。 我想了解如何更改用户代理和推荐人。 例如,我需要初始化 5 istance o awesomium webcontrol,对于它们中的每一个,我需要不同的用户代理和不同的推荐人。 这是我的简单代码

        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' 的定义

感谢您的帮助

【问题讨论】:

    标签: c# user-agent referrer awesomium


    【解决方案1】:

    您需要设置管理您的 WebControl 的 WebCore 的用户代理。这必须在您创建 WebControl 之前完成。

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

    【讨论】:

      【解决方案2】:

      我的解决方案 - 是 WebBrowser 的包装器,它实现了 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;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2021-05-28
        • 1970-01-01
        • 1970-01-01
        • 2012-12-19
        • 1970-01-01
        • 1970-01-01
        • 2011-04-02
        • 1970-01-01
        • 2021-02-12
        相关资源
        最近更新 更多