Fiddler ファイル出力

ステップ 1：Fiddler Script を開く
Fiddler を開き、メニューの「Rules」 → 「Customize Rules」をクリックする。
「CustomRules.js」 ファイルを開き、以下のコードを見つける。

static function OnBeforeRequest(oSession: Session) {
ステップ 2：Excel ファイルのダウンロードルールを追加する
OnBeforeRequest(oSession: Session) メソッドの 末尾 に以下のコードを追加する。

<pre><code>
//if (oSession.uriContains("/api/download")) {  // API URL が一致するか確認
//    oSession.utilCreateResponseAndBypassServer();  // Fiddler で直接レスポンスを返し、サーバーにはリクエストを送らない
if (oSession.fullUrl.Contains("https://example.com/api/download")) {  // API URL が一致するか確認    oSession.utilCreateResponseAndBypassServer(); 

    try {
        // 
        var filePath = "C:\\temp\\test.xlsx";

        if (!System.IO.File.Exists(filePath)) {
            oSession.utilSetResponseBody("File not Founded:" + filePath);
            return;
        }

        var fileBytes = System.IO.File.ReadAllBytes(filePath);
        var fileSize = fileBytes.Length;

        oSession.oResponse.headers.SetStatus(200, "OK");
        oSession.oResponse["Content-Type"] = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
        oSession.oResponse["Content-Disposition"] = "attachment; filename*=UTF-8''test.xlsx";
        oSession.oResponse["Content-Length"] = fileSize.ToString();

        oSession.responseBodyBytes = fileBytes;
    } catch (Exception ex) {
        oSession.utilSetResponseBody("Read Filed: " + ex.Message);
    }
}

</code></pre>
ステップ 3：保存して Fiddler を再起動する
「Ctrl + S」 を押して CustomRules.js を保存する。
Fiddler を閉じて再起動し、ルールを適用する。
ステップ 4：テスト
ブラウザで https://example.com/api/download にアクセスする。
「测试文件.xlsx」 が正常にダウンロードされ、ファイル名が文字化けしないことを確認する。

補足；
(echo HTTP/1.1 200 OK
echo Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
echo Content-Disposition: attachment; filename=test.xlsx
echo. 
type C:\temp\test.xlsx) > C:\temp\response.dat
補足２；
<pre><code>using System;
using System.IO;
using System.Net;
using System.Text;

class Program
{
    static void Main()
    {
        // 現在のプログラムの実行ディレクトリを取得
        string currentDirectory = AppDomain.CurrentDomain.BaseDirectory;

        // ユーザーにExcelファイル名を入力させる（拡張子も含める）
        Console.WriteLine("Excelファイル名を入力してください（例：テストファイル.xlsx）");
        string fileName = Console.ReadLine();

        // フルパスを作成（プログラムと同じディレクトリ内）
        string filePath = Path.Combine(currentDirectory, fileName);

        // ファイルが存在するか確認
        if (!File.Exists(filePath))
        {
            Console.WriteLine($"❌ エラー：ファイル '{fileName}' が見つかりません！");
            return;
        }

        // ファイル名をUTF-8でエンコード（URLエンコード）
        string encodedFileName = WebUtility.UrlEncode(fileName);
        string contentDisposition = $"attachment; filename*=UTF-8''{encodedFileName}";

        // HTTPレスポンス用の `response.dat` のパス
        string responseFile = Path.Combine(currentDirectory, "response.dat");

        try
        {
            using (FileStream fs = new FileStream(responseFile, FileMode.Create, FileAccess.Write))
            using (StreamWriter writer = new StreamWriter(fs, Encoding.UTF8))
            {
                // HTTPヘッダーを書き込む
                writer.WriteLine("HTTP/1.1 200 OK");
                writer.WriteLine("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
                writer.WriteLine($"Content-Disposition: {contentDisposition}");
                writer.WriteLine(); // 空行（ヘッダーとボディを区切る）
                writer.Flush(); // ヘッダーを確実にディスクへ書き込む

                // Excelファイルをバイト配列として読み込み、`response.dat` に書き込む
                byte[] fileBytes = File.ReadAllBytes(filePath);
                fs.Write(fileBytes, 0, fileBytes.Length);
            }

            Console.WriteLine($" HTTPレスポンスファイルを作成しました: {responseFile}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($" エラー発生：{ex.Message}");
        }
    }
}
</code></pre>