Как получить тело ответа на запрос AJAX с помощью dotnetbrowser?

Я просмотрел документ на веб-сайте dotnetbrowser... пока я видел пример, показывающий, как пересекаются вызовы Ajax или фильтровать вызовы Ajax... Я хочу знать, возможно ли получить ответ тела запроса Ajax после выполнения. если это возможно, как я могу пойти по этому поводу?

1 ответ

Решение

Да, возможно перехватить ответы на запросы AJAX в DotNetBrowser. Для реализации этого вы можете использовать ResourceHandler захватить URL-адреса запроса AJAX и 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);
            }
        }
    }
}
Другие вопросы по тегам