首页 / 交易学院 / 在 MQL5 中使用 WinInet(二):POST 请求与文件上传
在 MQL5 中使用 WinInet(二):POST 请求与文件上传
🌐

在 MQL5 中使用 WinInet(二):POST 请求与文件上传

跨平台 难度 · 高阶 2013 12 分钟阅读
WinInetHTTP POST文件上传CookieMQL5网络

回顾与第一课基础

第一课“使用 WinInet.dll 在互联网客户端间交换数据”讲了如何加载库、打开网页、用 GET 发送接收信息。本课在其 CMqlNet 类之上,扩展 POST、文件上传与 Cookie。

POST 请求:tagRequest 结构

由于 CMqlNet::Request 字段很多,先定义包含全部请求字段的 tagRequest 结构:请求方法、对象路径、请求头、附加数据、是否来自文件等。

struct tagRequest
  {
   string stVerb;    // GET/POST/...
   string stObject;  // 路径,如 "/api.php"
   string stHead;    // 请求头
   string stData;    // 附加数据
   bool   fromFile;  // true 时 stData 为文件名
  };
class CMqlNet
  {
public:
   bool MqlNet(tagRequest &req);
   bool SendData(tagRequest &req, string &resp);
  };

上传文件:multipart/form-data

用 multipart/form-data 表示法把文件作为表单字段发送。fromFile=true 时 stData 指本地文件名,CMqlNet 读取并按 RFC 1341 边界封装后 POST 到服务器。

用 Cookie 维持登录会话

很多 Web 服务需先登录再读数据。把登录响应里的 Set-Cookie 存进 stHead,后续请求带上同一 Cookie,即可在 MQL5 端读取需授权的内容。

⚠ 仅 Windows 可用
WinInet 是 Windows 系统库,Linux/macOS 上跑 MT5 无法使用。跨平台需求应改用 WebRequest() 内置函数。

小结

CMqlNet + tagRequest 让 MQL5 具备完整 HTTP 客户端能力:POST、文件上传、Cookie 会话。它是 EA 与外部系统(信号源、风控服务、报表)打通的桥梁。

常见问题

用 tagRequest 结构的 stVerb 字段填 GET/POST,其余字段(路径、头、数据、是否文件)统一管理。
把 tagRequest.fromFile 设为 true,stData 指本地文件名,按 multipart/form-data 封装后 POST 到服务器。
不能,它是 Windows 系统库。跨平台需求应改用 MQL5 内置的 WebRequest()。