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




