找了整整兩天,在大海撈針以後,終於在上古代碼中找到了一個可用的。。。。node
能夠用喜極而泣來形容測試有效以後的心情!!!cookie
跟cefsharp相比geckofx最大的優勢就是模式更接近於IE,包括node、xml、xpath以及單獨設置cookie等。可是資料、問答等實在是太古老太古老了。ide
若是已入坑geckofx的朋友,請必定要記住,遇到問題先不用去滿世界搜索,請第一時間去官網的 Issues 版塊搜索關鍵字。post
具體方法:https://bitbucket.org/geckofx/ -> 選擇版本 ->左側點擊 Issues -> 右側 Find Issues -> 右鍵谷歌翻譯網頁測試
最好每一個版本里面都進去搜一下,我就是在上古時代的29.0裏搜到的答案url
文章原地址:https://bitbucket.org/geckofx/geckofx-29.0/issues/197/getting-content-on-observer-responsespa
1、攔截響應:.net
一、具體代碼:翻譯
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Gecko.Net;
using Gecko.Observers;
namespace GeckofxWebBrowser.GeckofxExtension
{
public class MyObserver : BaseHttpModifyRequestObserver
{
public delegate void TicketLoadedEventHandler(HttpChannel p_HttpChannel, object sender, System.EventArgs e);
/// <summary>
/// 處理事件委託
/// </summary>
public event TicketLoadedEventHandler TicketLoadedEvent;
/// <summary>
/// 須要攔截的網址,只要獨一無二的關鍵詞既可
/// </summary>
public List<string> targetUrls = new List<string>() { };
protected override void ObserveRequest(HttpChannel p_HttpChannel)
{
if (p_HttpChannel != null)
{
if (targetUrls.Any(s => p_HttpChannel.Uri.AbsoluteUri.Contains(s)))
{
TraceableChannel oTC = p_HttpChannel.CastToTraceableChannel();
StreamListenerTee oStream = new StreamListenerTee();
oStream.Completed += (sender, e) => TicketLoadedEvent(p_HttpChannel, sender, e);
oTC.SetNewListener(oStream);
}
}
}
//********************* TicketLoadedEvent 事件處理參考 *********************
/// <summary>
/// 主要是如何讀取response數據,p_HttpChannel內可獲取url、header等,header內應該也包含setcookie,沒去測試
/// </summary>
/// <param name="p_HttpChannel"></param>
/// <param name="sender"></param>
/// <param name="e"></param>
//private void MyObserver_TicketLoadedEvent(HttpChannel p_HttpChannel, object sender, EventArgs e)
// {
// if (sender is StreamListenerTee)
// {
// StreamListenerTee oStream = sender as StreamListenerTee;
// byte[] aData = oStream.GetCapturedData();
// string sData = Encoding.UTF8.GetString(aData);
// }
// }
}
}
二、使用方法:將攔截類加入到觀察器server
MyObserver MyObs = new MyObserver();
MyObs.TicketLoadedEvent += MyObs_TicketLoadedEvent;//如何處理捕捉到的response
MyObs.targetUrls = new List<string>() {「baidu.com」,「163.com」 };//添加要攔截的url關鍵詞
ObserverService.AddObserver(MyObs);//添加觀察器
private void MyObs_TicketLoadedEvent(Gecko.Net.HttpChannel p_HttpChannel, object sender, EventArgs e)
{
if (sender is StreamListenerTee)
{
StreamListenerTee oStream = sender as StreamListenerTee;
byte[] aData = oStream.GetCapturedData();
string sData = Encoding.UTF8.GetString(aData);
}
}
2、若是要攔截請求
//在初始化的時候先設置這兩樣browser.UseHttpActivityObserver = true; browser.ObserveHttpModifyRequest += Browser_ObserveHttpModifyRequest;//private void Browser_ObserveHttpModifyRequest(object sender, GeckoObserveHttpModifyRequestEventArgs e) {//在這裏經過 e 的各項屬性作具體處理,能夠判斷url,能夠判斷標頭、包括post內容等}