読者です 読者をやめる 読者になる 読者になる

備忘録

備忘録

C# FiddlerCoreのサンプル

FiddlerCoreを使いHTTP, HTTPS, WebSocketのプロクシサーバーを作る場合のサンプル

using System;
using Fiddler;

namespace fiddler_core_exsample
{
  class Program
  {
    static void Main(string[] args)
    {
      FiddlerApplication.OnWebSocketMessage += FiddlerApplication_OnWebSocketMessage;
      FiddlerApplication.BeforeRequest += FiddlerApplication_BeforeRequest;
      FiddlerApplication.BeforeResponse += FiddlerApplication_BeforeResponse;
      CONFIG.IgnoreServerCertErrors = true;

      FiddlerApplication.Startup(8008, true, true, true);

      // システムのプロクシとして登録しない場合は第2引数をfalseにする
      //FiddlerApplication.Startup(8008, false, true, true);
      
      Console.ReadLine();

      // 終了時はShutdownを呼ばなければシステムプロクシに設定されたままになる
      FiddlerApplication.Shutdown();
    }

    private static void FiddlerApplication_BeforeResponse(Session oSession)
    {
      // GZipやchunked transferされた場合、
      // oSession.ResponseBodyが期待通りにならないので、
      // oSession.utilDecodeResponse(); を呼んでデコードする。
      oSession.utilDecodeResponse();
      Console.WriteLine("BeforeResponse");
      Console.WriteLine($"{oSession.fullUrl}");
      var bytes = oSession.ResponseBody;
    }

    private static void FiddlerApplication_BeforeRequest(Session oSession)
    {
      // レスポンスデータを書き換えるためにはtrueにする必要がある
      oSession.bBufferResponse = true;
      // 上位プロクシを設定する
      //oSession["X-OverrideGateway"] = "10.226.0.9:3128";
      Console.WriteLine("BeforeRequest");
      Console.WriteLine($"{oSession.fullUrl}");
      var bytes = oSession.RequestBody;
    }

    private static void FiddlerApplication_OnWebSocketMessage(object sender, WebSocketMessageEventArgs e)
    {
      Console.WriteLine($"OnWebSocketMessage: {e.oWSM.PayloadAsString()}");
      var bytes = e.oWSM.PayloadAsBytes();
    }
  }
}