首页 > 解决方案 > 在 MATLAB 中通过 HTTP 接收数据

问题描述

我已经在 MATLAB 论坛上发布了这个问题,但我仍然希望得到解决方案/回复。

我需要在服务器上访问 CSV 格式的数据,这需要一个令牌才能授予我访问权限。我的同事通常使用 Python 访问此服务。但是,由于我的代码都在 MATLAB 中,我更喜欢 MATLAB 中的数据,这样我就可以使用我已经验证过的现有函数。在 Python 中,我们使用 requests 包如下:

timeseries_url = 'https:// .... /csv'
payload = { 'variable': ['var1','var2'], 'platform_serial' : 'name_of_platform' , 'from' : 'start_time' , 'to' : 'end_time' }
header = {'Authorization': 'Bearer ' + 'authorisation_token'}
# Get the response:
response = requests.get(timeseries_url, headers=header, params=payload)
df = pandas.read_csv(io.StringIO(response.text))

我一直在阅读 HTTP 接口的 MATLAB 文档。但是,我注意到没有等效的 get 命令,而只有 send。我认为令牌应该matlab.net.http.HTTPOptions作为'Credentials'. 同样,标题可能是'Header' matlab.net.http.RequestMessage. 此外,我认为有效载荷可以通过'getFields'. 这些假设是否正确?

如何在 MATLAB 中最好地完成这项任务?此外,如何将数据从 CSV 更改为矩阵/单元格以供以后使用?我不认为使用csvreador readmatrixhere 是合适的。

我的替代方案是用于 Python 的 MATLAB 引擎,但我更喜欢简洁的全 MATLAB 解决方案。

标签: matlabhttp

解决方案


从 Python requests 模块的文档来看,payload 实际上只用于对 URL 进行编码

这是 MATLAB 的示例代码,您应该能够适应您的数据以提交成功的请求:

% URL and token data.
timeseries_url = 'https:// .... /csv';
auth_token = '';

% Structure for the payload.
struct_payload.key1 = 'value1'
struct_payload.key2 = 'value2'

% Find names of fields in struct_payload.
field_names = fieldnames(struct_payload);

% Format url for query.
encoded_url = [timeseries_url '?'];

for i = 1:numel(field_names)
    encoded_url = [encoded_url field_names{i} '=' struct_payload.(field_names{i}) '&'];
end
encoded_url(end) = [];

% Create weboptions object with headers.
options = weboptions('HeaderFields',{'Authorization' ['Bearer ' auth_token]});

% Submit webread request.
data = webread(encoded_url, options);

推荐阅读