c# - 如何使用 dotnetbrowser 获取 ajax 请求响应正文?

标签 c# ajax dotnetbrowser

我已经浏览了 dotnetbrowser 网站上的文档...虽然我看到了一个示例,该示例显示了如何交叉 Ajax 调用或过滤 Ajax 调用...我想知道是否有可能在执行后获得 Ajax 请求正文响应.如果可能的话,我该怎么做?

最佳答案

是的,可以在 DotNetBrowser 中拦截 AJAX 请求的响应。要实现这一点,您可以使用 ResourceHandler 来捕获 AJAX 请求 URL,并使用 NetworkDelegate 来拦截和过滤响应。

以下示例代码演示了可能的方法:

using DotNetBrowser;
using DotNetBrowser.WinForms;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Windows.Forms;

namespace GetAjaxResponseBodySample
{
    public partial class Form1 : Form
    {
        private static List<string> ajaxUrls = new List<string>();
        private WinFormsBrowserView browserView;

        public Form1()
        {
            InitializeComponent();
            browserView = new WinFormsBrowserView();
            browserView.Browser.Context.NetworkService.ResourceHandler = new AjaxResourceHandler();
            browserView.Browser.Context.NetworkService.NetworkDelegate = new AjaxNetworkDelegate();
            Controls.Add(browserView);
            browserView.Browser.LoadURL("http://www.w3schools.com/xml/ajax_examples.asp");
        }

        private class AjaxResourceHandler : ResourceHandler
        {
            public bool CanLoadResource(ResourceParams parameters)
            {
                if (parameters.ResourceType == ResourceType.XHR)
                {
                    Debug.WriteLine("Intercepted AJAX request: " + parameters.URL);
                    ajaxUrls.Add(parameters.URL);
                }
                return true;
            }
        }

        private class AjaxNetworkDelegate : DefaultNetworkDelegate
        {
            public override void OnDataReceived(DataReceivedParams parameters)
            {
                if (ajaxUrls.Contains(parameters.Url))
                {
                    Debug.WriteLine("Captured response for: " + parameters.Url);
                    Debug.WriteLine("MimeType = " + parameters.MimeType);
                    Debug.WriteLine("Charset = " + parameters.Charset);
                    PrintResponseData(parameters.Data);
                }
            }

            private void PrintResponseData(byte[] data) {
                Debug.WriteLine("Data = ");
                var str = Encoding.Default.GetString(data);
                Debug.WriteLine(str);
            }
        }
    }
}

关于c# - 如何使用 dotnetbrowser 获取 ajax 请求响应正文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42114104/

相关文章:

c# - 将对象转换为 Task<T> 并从类型为 Type 的变量设置 T

javascript - 在 Polymer 中铁形式的 ajax 响应后更新 UI

javascript - 无法访问 DotNetBrowser 中的窗口对象

c - 如何使用 DotNetBrowser 捕获验证码图像对象

c# - 仅使用按位运算符将两个整数相加?

c# - IDisposable 的享元和工厂问题

jquery - Ajax 成功进入新标签 - MVC

php - 使用模具不受欢迎/不好吗?

c# - 机器人 channel 注册 SocketException - 远程主机强制关闭现有连接