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

.NET Avalonia调用XTB API遇响应提前终止错误,如何配置SSL?

解决XTB模拟账户登录的SSL连接问题

你遇到的IOException: The response ended prematurely错误,核心原因是端口与协议不匹配:XTB的5124端口是无加密的WebSocket服务端口,并非HTTPS/HTTP服务端口,用HttpClient发送POST请求自然会出现协议错误。

下面提供两种在Avalonia .NET项目中实现正确SSL连接的方案:

方案一:使用XTB REST API(HTTPS)

XTB的REST API通过标准HTTPS端口443提供服务,修改请求端点即可正常发起SSL请求:

public static async Task Login()
{
    var httpClient = new HttpClient();
    // 替换为XTB REST API的正确HTTPS端点
    var uri = new Uri("https://xapi.xtb.com/api.trading");

    using StringContent jsonContent = new(
        JsonSerializer.Serialize(new
        {
            command = "login",
            arguments = new
            {
                userId = "XXXX",
                password = "XXXX",
                // 模拟账户必须添加此参数,值为true
                demo = true
            }
        }),
        Encoding.UTF8,
        "application/json");

    using HttpResponseMessage response = await httpClient.PostAsync(uri, jsonContent);
    response.EnsureSuccessStatusCode(); // 主动校验请求状态,异常时直接抛出

    var jsonResponse = await response.Content.ReadAsStringAsync();
    Console.WriteLine($"{jsonResponse}\n");
}

方案二:使用WebSocket SSL连接(官方优先推荐)

XTB核心API基于WebSocket实现,SSL加密的WebSocket端口为5123,使用ClientWebSocket完成连接:

public static async Task LoginViaWebSocket()
{
    using var webSocket = new ClientWebSocket();
    // SSL加密的WebSocket端点
    var uri = new Uri("wss://xapi.xtb.com:5123");

    await webSocket.ConnectAsync(uri, CancellationToken.None);

    // 构造登录消息
    var loginMsg = JsonSerializer.Serialize(new
    {
        command = "login",
        arguments = new
        {
            userId = "XXXX",
            password = "XXXX",
            demo = true
        }
    });
    var buffer = Encoding.UTF8.GetBytes(loginMsg);
    var segment = new ArraySegment<byte>(buffer);

    // 发送登录请求
    await webSocket.SendAsync(segment, WebSocketMessageType.Text, true, CancellationToken.None);

    // 接收响应
    var receiveBuffer = new byte[1024 * 4];
    var result = await webSocket.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), CancellationToken.None);
    var responseMsg = Encoding.UTF8.GetString(receiveBuffer, 0, result.Count);
    Console.WriteLine($"{responseMsg}\n");

    // 后续业务操作...

    // 关闭连接
    await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "操作完成", CancellationToken.None);
}

额外注意事项

  • 模拟账户必须在登录参数中添加demo = true,否则会默认连接真实账户环境
  • Avalonia .NET对HttpClient和ClientWebSocket的支持与标准.NET一致,无需额外配置SSL证书(XTB官方证书已被主流信任链收录)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 07:32:55