将curl转换为Matlab / Webwrite

时间:2018-05-14 11:42:07

标签: matlab curl

我有以下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"

2 个答案:

答案 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);