Awesomnium参数后(Awesomnium Post Parameters)

2019-10-17 09:34发布

目前,我与Awsomnium 1.7在C#环境中工作。 我只是用核心,并试图定义自定义后的参数。 现在,我用Google搜索了很多,我甚至张贴在awsomnium论坛,但没有回答。 我理解这个概念,但最近发生的变化只是扔下建议机械师和实例。

我发现: http://support.awesomium.com/kb/general-use/how-do-i-send-form-values-post-data

这里的问题是,web视图类不包含“OnResourceRequest”事件了。 到目前为止,我已经实现了IResourceInterceptor和有“OnRequest” - 功能覆盖公共ResourceResponse OnRequest(ResourceRequest要求)是签名,但我没有机会,以添加请求头到达那里。 这里的任何人任何想法? 我试图在文档中的样子,但我没有找到任何东西.....

Answer 1:

您需要附上IResourceInterceptor到WebCore的,不是的WebView。 这里有一个工作示例:

资源拦截器:

public class CustomResourceInterceptor : ResourceInterceptor
{
    protected override ResourceResponse OnRequest(ResourceRequest request)
    {
        request.Method = "POST";
        var bytes = "Appending some text to the request";
        request.AppendUploadBytes(bytes, (uint) bytes.Length);
        request.AppendExtraHeader("custom-header", "this is a custom header");

        return null;
    }
}

主要应用:

public MainWindow()
{
    WebCore.Started += WebCoreOnStarted;
    InitializeComponent();
}

private void WebCoreOnStarted(object sender, CoreStartEventArgs coreStartEventArgs)
{
    var interceptor = new CustomResourceInterceptor();

    WebCore.ResourceInterceptor = interceptor;
    //webView is a WebControl on my UI, but you should be able to create your own WebView off WebCore
    webView.Source = new Uri("http://www.google.com");
}


Answer 2:

上述HotN的回答是不错的; 其实,这是我根据我的答案上。 不过,我花了一周时间寻找这些信息,并放在一起的东西,将工作。 (以上答案有几个问题这,起码,使其不可行与Awesomium的V1.7)。我一直在寻找的是什么,将工作的权利开箱。

这里是解决方案。 它需要改进,但目前适合我的需要。 我希望这可以帮助别人。

// CRI.CustomResourceInterceptor
//
// Author:   Garison E Piatt
// Contact:  {removed}
// Created:  11/17/14
// Version:  1.0.0
//
// Apparently, when Awesomium was first created, the programmers did not understand that someone would
// eventually want to post data from the application. So they made it incredibly difficult to upload
// POST parameters to the remote web site. We have to jump through hoops to get that done.
//
// This module provides that hoop-jumping in a simple-to-understand fashion. We hope. It overrides
// the current resource interceptor (if any), replacing both the OnRequest and OnFilterNavigation
// methods (we aren't using the latter yet).
//
// It also provides settable parameters. Once this module is attached to the WebCore, it is *always*
// attached; therefore, we can simply change the parameters before posting to the web site.
//
// File uploads are currently unhandled, and, once handled, will probably only upload one file. We
// will deal with that issue later.
//
// To incoroprate this into your application, follow these steps:
// 1. Add this file to your project. You know how to do that.
// 2. Edit your MainWindow.cs file.
//   a. At the top, add:
//       using CRI;
//   b. inside the main class declaration, near the top, add:
//       private CustomResourceInterceptor cri;
//   c. In the MainWindow method, add:
//       WebCore.Started += OnWebCoreOnStarted;
//       cri = new CustomResourceInterceptor();
//     and (set *before* you set the Source value for the Web Control):
//       cri.Enabled = true;
//       cri.Parameters = String.Format("login={0}&password={1}", login, pw);
//     (Choose your own parameters, but format them like a GET query.)
//   d. Add the following method:
//       private void OnWebCoreOnStarted(object sender, CoreStartEventArgs coreStartEventArgs) {
//         WebCore.ResourceInterceptor = cri;
//       }
// 3. Compile your application. It should work.

using System;
using System.Runtime.InteropServices;
using System.Text;
using Awesomium.Core;
using Awesomium.Windows.Controls;


namespace CRI {
  //* CustomResourceInterceptor
  // This object replaces the standard Resource Interceptor (if any; we still don't know) with something
  // that allows posting data to the remote web site. It overrides both the OnRequest and OnFilterNavigation
  // methods. Public variables allow for run-time configuration.
  public class CustomResourceInterceptor : IResourceInterceptor {
    // Since the default interceptor remains overridden for the remainder of the session, we need to disable
    // the methods herein unless we are actually using them. Note that both methods are disabled by default.
    public bool RequestEnabled = false;
    public bool FilterEnabled = false;

    // These are the parameters we send to the remote site. They are empty by default; another safeguard
    // against sending POST data unnecessarily. Currently, both values allow for only one string. POST
    // variables can be combined (by the caller) into one string, but this limits us to only one file
    // upload at a time. Someday, we will have to fix that. And make it backward-compatible.
    public String Parameters = null;
    public String FilePath = null;

    /** OnRequest
    ** This ovverrides the default OnRequest method of the standard resource interceptor. It receives
    ** the resource request object as a parameter.
    **
    ** It first checks whether or not it is enabled, and returns NULL if not. Next it sees if any
    ** parameters are defined. If so, it converst them to a byte stream and appends them to the request.
    ** Currently, files are not handled, but we hope to add that someday.
    */
    public ResourceResponse OnRequest(ResourceRequest request) {
      // We do nothing at all if we aren't enabled. This is a stopgap that prevents us from sending
      // POST data with every request.
      if (RequestEnabled == false) return null;

      // If the Parameters are defined, convert them to a byte stream and append them to the request.
      if (Parameters != null) {
        var str = Encoding.Default.GetBytes(Parameters);
        var bytes = Encoding.UTF8.GetString(str);

        request.AppendUploadBytes(bytes, (uint)bytes.Length);
      }

      // If either the parameters or file path are defined, this is a POST request. Someday, we'll
      // figure out how to get Awesomium to understand Multipart Form data.
      if (Parameters != null || FilePath != null) {
        request.Method = "POST";
        request.AppendExtraHeader("Content-Type", "application/x-www-form-urlencoded"); //"multipart/form-data");
      }

      // Once the data has been appended to the page request, we need to disable this process. Otherwise,
      // it will keep adding the data to every request, including those that come from the web site.
      RequestEnabled = false;
      Parameters = null;
      FilePath = null;

      return null;
    }


    /** OnFilterNavigation
    ** Not currently used, but needed to keep VisualStudio happy.
    */
    public bool OnFilterNavigation(NavigationRequest request) {
      return false;
    }
  }
}


文章来源: Awesomnium Post Parameters