如何使用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×tamp=" + 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
相关产品推荐
相关产品推荐

