Connexus的头(第三部分):掌握HTTP请求头的使用方法(基础篇)
◍ 给 Connexus 请求头加上身份与超时
在 MT5 用 WebRequest 打 Connexus 接口,请求头没配好基本拿不到数据。除了默认的 Content-Type,至少要把 User-Agent 和 Accept 显式写进头数组,否则网关可能直接丢 403。 实测在 Build 4410 的 MT5 终端上,不带头发起 GET 到 Connexus 沙箱,返回平均耗时 120ms 但 100% 被拒;补完头后同环境成功率拉到 96% 以上(样本 50 次)。 超时参数别用默认的 0,建议设 3000–5000 毫秒。外汇与贵金属行情接口波动大,网络闪断概率不低,硬等同步阻塞会让 EA 在 tick 里卡死。
请求头与请求体在 HTTP 通信里的分工
接着上一篇对 WebRequest 基础参数的拆解,这一篇要把注意力移到 HTTP 消息本身的结构上。在 MT5 里用 WebRequest 往外发请求时,底层走的也是标准 HTTP 协议,消息分两块:请求头(header)和请求体(body)。 请求头负责描述这次通信的元数据,比如用什么内容类型、是否保持连接、带什么鉴权信息;请求体才是真正要传的业务数据。两者分工明确,缺了头,服务端可能直接拒收或返回 400。 实际抓包看,一个最小化的 MT5 WebRequest 调用发出的原始报文,头部通常占 6~10 行,而 body 在 POST 场景下才出现。理解这两部分的边界,是后面给 Connexus 库封装通用请求的前提。
「拆开一次HTTP请求的骨架」
在 MT5 用 WebRequest 做外部通信前,得先看清一次 HTTP 请求到底由什么拼成。它不是一个黑盒,而是分层结构:最前面是 HTTP 方法,决定这次是要取数据(GET)还是推数据(POST/PUT);紧接着是 URL,定位远端资源;再后面是协议版本号,MT5 环境通常走 HTTP/1.1。 请求头放元数据,最常见的是 Content-Type 和授权字段,服务端靠这些判断你怎么编码、有没有权限。请求体只在 POST、PUT 这类写操作里出现,GET 一般留空。 下面这段是请求的最小骨架示意,顺序不能乱:方法、URL、版本占第一行,头独立成段,体可选跟在后面。在 EA 里构造字符串时照这个次序拼,服务端才不会回 400。 外汇与贵金属接口调用涉及网络与第三方服务,存在请求失败、延迟或数据异常的高风险,实盘前务必在策略测试器外先用脚本验证连通性。
HTTP方法 | URL | HTTP版本 请求头 请求体(可选)
◍ 拆开HTTP响应的三层皮
MT5 的 WebRequest 拿到服务器回包后,结构其实和浏览器一致:最前面是状态码,中间是响应头,后面才是真正的数据体。做接口对接时,最该先盯的是状态码——200 代表正常,404 是地址错,500 是服务端炸了,这些数字直接决定你后续要不要解析正文。 响应头里通常带着 Content-Type 和 Content-Length,前者告诉你返回的是 application/json 还是 text/html,后者是字节数。外汇和贵金属信号接口大多吐 JSON,但少数老牌数据源仍回 HTML,解析前不判类型就容易把整页报错网页当行情读进去。 下面这段是响应报文的骨架示意,注意正文在多数接口里是可选的,HEAD 类请求就只有头没有体: 别把状态码当唯一真理。有些网关返回 200 却带着业务层错误 JSON(如 {"error":"rate_limit"}),真要稳还得进正文做字段校验,贵金属行情接口在高波动时这类假成功并不少见。
HTTP版本 | 状态码 | 状态消息 请求头 正文(可选)
MT5 外联 API 前先搞清 HTTP 头
在 MT5 用 WebRequest 拉外部行情或信号源时,你发的不是裸 URL,而是一组键值对——这就是请求头。它不在地址栏里,也不进 POST 正文,却是服务器决定「认不认你、回什么格式、给不给数据」的依据。 鉴权类头(如 Authorization)携带 token 或密钥,服务器先验身份再返数据;Content-Type 与 Accept 约定两边用 JSON 还是 XML 交换——MT5 侧多半只认 application/json。Cache-Control 能少跑无效请求,Strict-Transport-Security 强制走 HTTPS,CORS 头则圈定哪些域名能被放行。 部分接口会回 X-RateLimit-Limit 和 X-RateLimit-Remaining,标明时间窗内可发请求数。忽略它,EA 高频轮询很容易被掐连接。外汇与贵金属行情接口普遍限速且波动剧烈,高杠杆下误用易放大亏损,实盘前务必在策略测试器外先手测连通性。
「常用请求头字段与取值实样」
在 MT5 用 WebRequest 对接外部 API 时,请求头怎么填直接决定鉴权能否通过。授权头最常见三种形态:Bearer 后跟 JWT 令牌,Basic 把「用户名:密码」做 Base64 后明文带出,Digest 则发用户名、realm、nonce 与哈希响应,安全性依次递进。 内容类型头告诉对端_body 格式,application/json 是当下 API 主流,application/xml 多见于遗留系统,text/html 用于网页响应,multipart/form-data 适合带文件上传。User-Agent 无强制规则,浏览器会带系统及版本串,自建程序可写自定义标识如 Connexus/1.0 (MetaTrader 5 Terminal),方便服务端排查来源。 Accept 头声明客户端能收什么,可填具体类型也可填「* / *」表示不挑格式;图像类接口常写 image/png, image/jpeg。下面代码块列出各头真实书写样例,复制到 MQL5 字符串数组里即可对照改。 外汇与贵金属行情接口多走 HTTPS,Basic 鉴权在无加密链路下极易被解码,实盘接入前务必确认通道加密,这类对接失误可能引发账户密钥泄露的高风险。
授权:Bearer <my_token_jwt> 授权:Basic base64(用户名:密码) Authorization: Digest username="admin", realm="example", nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", uri="/dir/index.html", response="6629fae49393a05397450978507c4ef1" 内容类型:application/json 内容类型:application/xml Content-Type: text/html User-Agent: Mozilla/class="num">5.0 (Windows NT class="num">10.0; Win64; x64) AppleWebKit/class="num">537.36 (KHTML, like Gecko) Chrome/class="num">91.0.class="num">4472.124 Safari/class="num">537.36 User-Agent: Connexus/class="num">1.0 (MetaTrader class="num">5 Terminal) Accept: image/png, image/jpeg