MATLAB 未正确发送 HTTP POST 请求

时间:2021-02-04 03:49:15

标签: matlab http post

我目前正在尝试构建一个基于 MATLAB 的系统来与我的股票经纪人的 API 进行交互。但是,我在向服务器发送 http post 请求时遇到了一些问题。

在使用 POSTMAN 进行测试时,我已经让它完美运行,但由于某种原因,它一直拒绝我的 MATLAB 发送请求。我现在通过 PIPEDREAM 测试实际请求,这让我可以查看 http 请求。

好的和坏的请求图片:

Image of the good and bad requests

左边是我的邮递员请求的图像,它完美地处理为 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) 相同),它会说我的长度是错误的,即使我的邮递员请求似乎没有遇到这个问题。

1 个答案:

答案 0 :(得分:0)

找到了答案……Matlabs http 的东西绝对是脑残。

我仔细查看了原始截获的消息(pipedream 只是将您的请求发回给您,您可以使用 string(login_resp) 查看它)。

出于某些该死的原因,matlab 将 json 字符串用“s 包裹起来,这使得接收者将整个正文视为一个字符串。这是由于将“内容类型”设置为“应用程序/json”引起的。更改内容-键入“text/plain”并没有将其包含在“s中,并完全解决了我的问题