我有以下curl命令我需要使用Matlab和webwrite使用POST发送到Web服务器。我的问题是我总是得到一个错误的请求"回答所以我的语法必然是错误的。有没有人知道这个curl命令如何以正确的方式使用webwrite在Matlab中发送身体?
body=$(cat << EOF
{
"order": {
"units": "100",
"instrument": "EUR_USD",
"timeInForce": "FOK",
"type": "MARKET",
"positionFill": "DEFAULT"
}
}
EOF
)
curl \
-X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <AUTHENTICATION TOKEN>" \
-d "$body" \
"https://api-fxtrade.oanda.com/v3/accounts/<ACCOUNT>/orders"
答案 0 :(得分:1)
我刚刚问了一个类似的问题,所以这可能不适用于第一次。但是,如果不知道某些登录详细信息,我无法测试,所以我希望这会有所帮助。
data_InputValues = struct ('units',100,'instrument','EUR_USD','timeInForce','FOK','type','MARKET','positionFill','DEFAULT');
MyBody = matlab.net.http.MessageBody(struct('order',data_InputValues));
MyHTTPOptions = matlab.net.http.HTTPOptions(); % use this to change the options if necessary (e.g. extend timeout)
Request = matlab.net.http.RequestMessage;
Request.Method = 'POST';
Request.Header = matlab.net.http.HeaderField('Content-Type','application/json','Authorization: Bearer',AUTHENTICATION TOKEN);
Request.Body = MyBody;
uri = matlab.net.URI('https://api-fxtrade.oanda.com/v3/accounts/<ACCOUNT>/orders');
[response a ~] = Request.send(uri,MyHTTPOptions);
我努力的部分是生成MyBody部分(在你的情况下,这是解析order变量的子变量)。如果你让这个工作,我会很想知道如何!附:我的问题以防万一:https://stackblitz.com/angular/eyrxeklkoyq?file=app%2Finput-clearable-example.ts
答案 1 :(得分:1)
正文的正确格式如下:
body = struct('units',100,'instrument','EUR_USD','timeInForce','FOK',...
'type','MARKET','positionFill','DEFAULT');
对于您需要的HTTP 标题,您可以在使用weboptions时使用webwrite指定它们。
附加标题的语法:
options = weboptions('KeyName','Name','KeyValue','Value')
其中 Name 和 Value 分别是标题的名称及其值。 您必须在网络选项中添加所需的标题。
对于您提供的代码,正确的语法如下:
options = weboptions('MediaType','application/json',...
'KeyName','Authorization: Bearer','KeyValue','Token');
然后,您可以在感兴趣的URL上执行POST请求。
response = webwrite(url,body,options);