我已经在 MATLAB 论坛上发布了这个问题,但我仍然希望得到解决方案/回复。
我需要访问服务器上的 CSV 格式数据,这需要一个 token 才能获得访问权限。我的同事通常使用 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 接口(interface)的 MATLAB 文档。但是,我注意到没有等效的 get 命令,只有 send。
我认为 token 应该作为 'Credentials'
输入到 matlab.net.http.HTTPOptions
对象中。同样, header 可以是 'Header'
matlab.net.http.RequestMessage
。此外,我认为有效载荷可以通过'getFields'
获得。这些假设是否正确?
如何在 MATLAB 中最好地完成这项任务?此外,如何将数据从 CSV 更改为矩阵/单元格供以后使用?我不认为在这里使用 csvread
或 readmatrix
是合适的。
我的替代方案是用于 Python 的 MATLAB 引擎,但我更喜欢简洁的全 MATLAB 解决方案。
最佳答案
从 Python 请求模块的文档来看,payload 实际上只用于 encode the 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);
关于matlab - 在 MATLAB 中通过 HTTP 接收数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57806162/