🌐
在 MQL5 中使用 WinInet(二):POST 请求与文件上传
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 端读取需授权的内容。
- 登录 → 解析 Set-Cookie → 缓存到内存。
- 后续请求在 stHead 注入 Cookie 保持会话。
- 敏感令牌别写日志,避免泄露。
⚠ 仅 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()。