我目前正在尝试构建一个基于 MATLAB 的系统来与我的股票经纪人的 API 进行交互。但是,我在向服务器发送 http post 请求时遇到了一些问题。
在使用 POSTMAN 进行测试时,我已经让它完美运行,但由于某种原因,它一直拒绝我的 MATLAB 发送请求。我现在通过 PIPEDREAM 测试实际请求,这让我可以查看 http 请求。
好的和坏的请求图片:
左边是我的邮递员请求的图像,它完美地处理为 JSON 字符串。但是我的 MATLAB 请求没有得到正确处理,并且比实际字符串值长 10 个字符。
可以在此处看到发送请求的(修剪的)代码。
% http request classes
import matlab.net.*
import matlab.net.http.*
% prepare payload
username = "usr";
password = "XXXXXXXXXXXXX";
login_payload = struct("username", username, "password", password);
request = RequestMessage('POST', [ bunchOfHeaders ], jsonencode(login_payload));
% Send request to login api
[login_resp, c, h] = request.send("https://trading.somebroker.com/login/secure/login");
有人知道这里会发生什么吗?如果我将 content-lenght 设置为“正确”长度(与 length(login_payload) 相同),它会说我的长度是错误的,即使我的邮递员请求似乎没有遇到这个问题。
答案 0 :(得分:0)
找到了答案……Matlabs http 的东西绝对是脑残。
我仔细查看了原始截获的消息(pipedream 只是将您的请求发回给您,您可以使用 string(login_resp) 查看它)。
出于某些该死的原因,matlab 将 json 字符串用“s 包裹起来,这使得接收者将整个正文视为一个字符串。这是由于将“内容类型”设置为“应用程序/json”引起的。更改内容-键入“text/plain”并没有将其包含在“s中,并完全解决了我的问题