You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Fiddler拦截币安POST请求并追加发送修改后的新请求

解决方案

核心逻辑调整

你原有逻辑放在OnBeforeRequest中会导致新请求在原请求发出前触发,不符合「原请求正常发送完成后再发新请求」的要求,建议将自定义请求逻辑迁移到OnBeforeResponse方法中,仅当原请求响应状态码为200时才触发新请求,避免原请求失败仍发单的问题。

关键问题解决

1. 请求头复用

原请求携带的X-MBX-APIKEY可以直接从原会话的请求头中提取,构造新请求时只需修改Host字段为fapi.binance.com,其余公共头可直接复用。

2. HMAC-SHA256签名生成

Fiddler脚本基于JScript.NET运行,可直接调用.NET内置的加密类库实现签名,无需额外依赖,签名规则严格遵循币安官方要求:将所有请求参数按字典序拼接后,用Secret Key作为密钥做HMAC-SHA256加密,结果转十六进制字符串即可。

3. 新请求发送

直接调用FiddlerApplication.oProxy.SendRequest方法,传入构造好的请求头和请求体字节即可,不会影响原请求的正常响应。

完整可运行代码

首先在Fiddler脚本的全局作用域(Handlers类内部,所有方法之外)添加签名辅助函数:

// 币安HMAC-SHA256签名生成辅助函数
static function GenerateSignature(queryString: String, secretKey: String): String {
    var encoder = System.Text.Encoding.UTF8;
    var keyBytes = encoder.GetBytes(secretKey);
    var queryBytes = encoder.GetBytes(queryString);
    var hmac = new System.Security.Cryptography.HMACSHA256(keyBytes);
    var hashBytes = hmac.ComputeHash(queryBytes);
    return System.BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
}

然后修改OnBeforeResponse方法,添加自定义请求逻辑:

static function OnBeforeResponse(oSession: Session) {
    // 筛选符合条件的原请求:POST、包含order路径、响应成功
    if (oSession.RequestMethod == "POST" && oSession.uriContains("api.binance.com/api/v3/order") && oSession.responseCode == 200) {
        // 配置项:替换为你自己的币安API Secret
        const BINANCE_SECRET = "YOUR_BINANCE_API_SECRET";
        // 生成新请求的时间戳(不要用原请求的时间戳,避免超时)
        var newTimestamp = (new Date()).getTime().toString();
        // 构造新请求的参数(按币安要求排序,避免签名错误)
        var queryParams = "symbol=KEEPUSDT&side=BUY&type=MARKET&quantity=100&timeInForce=GTC&recvWindow=5000&timestamp=" + newTimestamp;
        // 生成签名
        var sign = GenerateSignature(queryParams, BINANCE_SECRET);
        var fullUrl = "https://fapi.binance.com/fapi/v1/order?" + queryParams + "&signature=" + sign;
        
        // 构造新请求头:复用原请求的公共头,修改必要字段
        var newHeaders = oSession.RequestHeaders.Clone();
        newHeaders.RemoveAll("Host");
        newHeaders.Add("Host", "fapi.binance.com");
        newHeaders.RemoveAll("Content-Length");
        // POST请求如果参数都放在url里,请求体为空
        var newBody = System.Text.Encoding.UTF8.GetBytes("");
        
        // 发送新请求,不阻塞原响应
        FiddlerApplication.oProxy.SendRequest(newHeaders, newBody, null);
    }
}

注意事项

  • 请将代码中的YOUR_BINANCE_API_SECRET替换为你自己的币安API Secret,注意密钥不要泄露给他人
  • 新请求的交易对、买卖方向、数量等参数可根据你的业务需求自行调整,修改queryParams中的对应字段即可
  • 数量参数要符合对应交易对的精度要求,否则会触发币安参数错误,可通过toFixed()方法提前做精度处理
  • 建议先使用币安测试网接口测试逻辑正确性,确认无误后再切换到实网环境,避免误发单造成资产损失

内容的提问来源于stack exchange,提问作者Max

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 23:45:00