You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

MQL4中WebRequest() PUT方法正确用法:更新JSON失败(404/4000)求助

解决MQL4 WebRequest更新myjson.com数据返回404/4000错误的问题

看起来你在尝试用MQL4的WebRequest更新myjson上的数据时踩了几个常见的坑,咱们一步步把它搞定:

首先看你返回的404状态码,这说明服务器找不到你请求的资源,再加上MQL4的错误码4000(对应ERR_WEB_REQUEST_ERROR),大概率是请求方法、格式或者参数顺序出问题了。

你的代码里的几个关键问题:

  • HTTP请求方法搞混了参数顺序
    WebRequest的第一个参数才是请求方法(POST/PUT/GET等),但你现在把"POST"放在第一个参数,第四个参数又写了"PUT",完全颠倒了!更新现有资源应该用PUT方法,得把方法写对位置。

  • JSON格式不标准
    你构造的obj字符串是"'data:{\"name\":\"Labu\"}'",外层多了单引号,而且正确的JSON结构应该是{"data":{"name":"Labu"}},这种非标准格式服务器根本解析不了。

  • 代理参数没必要填NULL
    如果你不需要代理,直接传空字符串就行,NULL可能会导致额外的问题。

修正后的完整代码:

void postJson() {
    char post[], result[];
    // 保持Content-Type头正确
    string headers = "Content-Type: application/json\r\n";
    // 构造标准的JSON payload
    string obj = "{\"data\":{\"name\":\"Labu\"}}";
    // 把字符串转成字符数组,WHOLE_ARRAY确保不带终止符
    StringToCharArray(obj, post, 0, WHOLE_ARRAY);
    
    // 正确调用WebRequest:PUT方法放在第一个参数,代理相关留空
    int res = WebRequest("PUT", 
                        "https://api.myjson.com/bins/tj8e2", 
                        "", 
                        "", 
                        10000, 
                        post, 
                        ArraySize(post), 
                        result, 
                        headers);
    
    // 打印结果方便调试
    Print("Status code: ", res, ", error: ", GetLastError());
    Print("Server response: ", CharArrayToString(result));
}

额外需要注意的点:

  • 先确认你的myjson链接https://api.myjson.com/bins/tj8e2是有效的,直接在浏览器里打开看看能不能返回数据,如果打不开,那就是链接本身失效了,得重新生成一个。
  • MT4默认会拦截WebRequest,你需要在【工具】->【选项】->【EA交易】里勾选允许WebRequest用于所列URL,然后把https://api.myjson.com添加到列表里,否则请求会被直接拒绝。
  • 如果还是有问题,可以先把请求复制到Postman里测试,确认格式和方法没问题后再放回MQL4代码里,这样更容易排查问题。

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

火山引擎 最新活动