我目前正在尝试建立一个基于MATLAB的系统,与我的股票经纪人的API接口。然而,我在向服务器发送http post请求时遇到了相当多的问题。
我已经让它在测试邮递员时完美地工作了,但由于某种原因,它一直拒绝我的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- length设置为“正确的”长度(与length (Login_payload)相同),它会显示我的长度是错误的,即使我的邮递员请求似乎没有遇到这个问题。
发布于 2021-02-05 02:52:40
找到答案了。Matlabs http的东西简直是胡思乱想。
我仔细研究了截获的原始消息(pipedream只是将您的请求发回给您,您可以使用string(Login_resp)查看它)。
由于某种该死的原因,matlab将json字符串封装为"s“,这使得接收器将整个正文视为字符串。这是由于将" content-type”设置为"application/json“造成的。将content-type更改为"text/plain”并没有将其封装在"s“中,这完全解决了我的问题。
https://stackoverflow.com/questions/66039108
复制相似问题