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

如何使用C#向券商接口发送带Cookie和Payload的下单请求

C# 构造发送券商买入委托请求实现方案

以下两种实现方式可根据你使用的.NET版本选择:


前置准备

首先定义和请求Payload对应的实体类,方便序列化生成JSON:

public class OrderPostRequest
{
    public bool IsSymbolCautionAgreement { get; set; }
    public bool CautionAgreementSelected { get; set; }
    public bool IsSymbolSepahAgreement { get; set; }
    public bool SepahAgreementSelected { get; set; }
    public int FinancialProviderId { get; set; }
    public string isin { get; set; }
    public int maxShow { get; set; }
    public int minimumQuantity { get; set; }
    public int orderCount { get; set; }
    public int orderId { get; set; }
    public decimal orderPrice { get; set; }
    public int orderSide { get; set; }
    public int orderValidity { get; set; }
    public string orderValiditydate { get; set; }
    public int shortSellIncentivePercent { get; set; }
    public bool shortSellIsEnabled { get; set; }
}

如果用Newtonsoft.Json序列化可以直接用这个类,如果用System.Text.Json记得按需配置序列化规则,避免驼峰/帕斯卡命名不匹配的问题。


方案1:使用HttpClient(推荐,适用于.NET Core 2.0+、.NET 5+所有新版本)

HttpClient是.NET官方目前推荐的HTTP客户端,性能和易用性都优于HttpWebRequest,代码示例如下:

using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;

// 注意:HttpClient全局初始化一次即可,不要每次请求都new
private static readonly HttpClient _httpClient = new HttpClient();

public async Task SendOrderRequestAsync()
{
    // 1. 构造请求数据
    var orderReq = new OrderPostRequest
    {
        IsSymbolCautionAgreement = false,
        CautionAgreementSelected = false,
        IsSymbolSepahAgreement = false,
        SepahAgreementSelected = false,
        FinancialProviderId = 1,
        isin = "IRT1PLSH0001",
        maxShow = 0,
        minimumQuantity = 0,
        orderCount = 1000,
        orderId = 0,
        orderPrice = 82870,
        orderSide = 65, // 买卖方向,65对应买入,可根据券商规则调整
        orderValidity = 74,
        orderValiditydate = null,
        shortSellIncentivePercent = 0,
        shortSellIsEnabled = false
    };

    // 2. 序列化为JSON
    var json = JsonSerializer.Serialize(orderReq);
    var content = new StringContent(json, Encoding.UTF8, "application/json");

    // 3. 配置请求头,和抓包拿到的保持一致
    _httpClient.DefaultRequestHeaders.Clear();
    _httpClient.DefaultRequestHeaders.Add("authorization", "BasicAuthentication ca4f8b23-2921-4f51-ab7c-ed9fcb04bb4d");
    _httpClient.DefaultRequestHeaders.Add("origin", "https://www.mofidonline.com");
    _httpClient.DefaultRequestHeaders.Referrer = new Uri("https://www.mofidonline.com/");
    _httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36");
    _httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("*/*"));
    _httpClient.DefaultRequestHeaders.AcceptEncoding.ParseAdd("gzip, deflate, br");
    _httpClient.DefaultRequestHeaders.AcceptLanguage.ParseAdd("en-US,en;q=0.9,fa;q=0.8");

    try
    {
        // 4. 发送POST请求
        var response = await _httpClient.PostAsync("https://api2.mofidonline.com/Web/V1/Order/Post", content);
        // 确保请求成功
        response.EnsureSuccessStatusCode();
        // 读取响应内容
        var responseStr = await response.Content.ReadAsStringAsync();
        Console.WriteLine($"请求成功,响应内容:{responseStr}");
    }
    catch (HttpRequestException ex)
    {
        Console.WriteLine($"请求失败,错误信息:{ex.Message}");
    }
}

方案2:使用HttpWebRequest(兼容.NET Framework等旧版本框架)

using System.IO;
using System.Net;
using System.Text;
using Newtonsoft.Json; // 也可以用System.Text.Json

public void SendOrderRequestWithHttpWebRequest()
{
    // 1. 构造请求对象
    var request = (HttpWebRequest)WebRequest.Create("https://api2.mofidonline.com/Web/V1/Order/Post");
    request.Method = "POST";

    // 2. 配置请求头
    request.Headers.Add("authorization", "BasicAuthentication ca4f8b23-2921-4f51-ab7c-ed9fcb04bb4d");
    request.Headers.Add("origin", "https://www.mofidonline.com");
    request.Referer = "https://www.mofidonline.com/";
    request.UserAgent = "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36";
    request.Accept = "*/*";
    request.Headers.Add("Accept-Encoding", "gzip, deflate, br");
    request.Headers.Add("Accept-Language", "en-US,en;q=0.9,fa;q=0.8");
    request.ContentType = "application/json";

    // 3. 构造请求体
    var orderReq = new OrderPostRequest
    {
        IsSymbolCautionAgreement = false,
        CautionAgreementSelected = false,
        IsSymbolSepahAgreement = false,
        SepahAgreementSelected = false,
        FinancialProviderId = 1,
        isin = "IRT1PLSH0001",
        maxShow = 0,
        minimumQuantity = 0,
        orderCount = 1000,
        orderId = 0,
        orderPrice = 82870,
        orderSide = 65,
        orderValidity = 74,
        orderValiditydate = null,
        shortSellIncentivePercent = 0,
        shortSellIsEnabled = false
    };
    var json = JsonConvert.SerializeObject(orderReq);
    var byteData = Encoding.UTF8.GetBytes(json);
    request.ContentLength = byteData.Length;

    // 4. 写入请求体
    using (var reqStream = request.GetRequestStream())
    {
        reqStream.Write(byteData, 0, byteData.Length);
    }

    try
    {
        // 5. 获取响应
        using (var response = (HttpWebResponse)request.GetResponse())
        using (var reader = new StreamReader(response.GetResponseStream()))
        {
            var responseStr = reader.ReadToEnd();
            Console.WriteLine($"请求成功,响应内容:{responseStr}");
        }
    }
    catch (WebException ex)
    {
        using (var reader = new StreamReader(ex.Response.GetResponseStream()))
        {
            var errorStr = reader.ReadToEnd();
            Console.WriteLine($"请求失败,错误信息:{ex.Message},错误响应:{errorStr}");
        }
    }
}

注意事项

  • 抓包拿到的authorization是身份校验凭证,会定期过期,实际使用时需要先模拟登录券商网站获取最新的有效凭证,不能直接使用示例中的值
  • 委托参数如证券代码isin、委托数量orderCount、委托价格orderPrice、买卖方向orderSide等需要根据你的实际交易需求修改
  • 券商接口通常有请求频率限制、风控校验规则,异常高频请求可能会导致账号被限制使用,请务必遵守券商的使用规则
  • 如果请求失败,优先重新抓包核对请求头、请求体字段是否有更新,是否有新增的校验参数

内容的提问来源于stack exchange,提问作者Ali.s

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:54:04