matlab这个学术界的编程语言我是几个月前听说,有些基本操作是真的麻烦,当然在其他方面Matlab是相当🐂🍺
使用Matlab进行GET/POST请求调用接口,提交参数。
之前苦于没有将get请求的query参数进行变量提取,好在www.mathworks.com找到有文档说明
GET请求操作函数封装
get网络请求封装成函数
%GET网络请求
function [result]=get_request(uri,query)
import matlab.net.* %导入Matlab网络请求库
import matlab.net.http.*
uri = URI(uri);%请求地址;
uri.Query = matlab.net.QueryParameter(query);%get 附加请求参数
r = RequestMessage;
r.Method = 'GET';%使用GET请求类型
response = send(r,uri);%发送请求
status = response.StatusCode%获取服务器响应的状态码
if (status==200) %一般成功响应的状态码为200 表示ok 即成功
content = response.Body.Data; %获取服务器响应的内容
result = content;
else
disp('请求失败')
end
说明:
参数1 uri: 请求url, 如:http://hhtjim.com
参数2 query: get请求参数 传入struct类型数据
还有就是接口返回json数据(response响应头有指定type json),matlab会自动解析json数据,最后用调用就好,不方便查看的那就debug。
如果要手动处理json字符串的话使用, 进行编解操作。
调用举例:
请求:http://hhtjim.com?arg=123
get_request('http://hhtjim.com',struct('arg', '123'))
或者
query.arg = '123'
get_request('http://hhtjim.com',query)
上面两种方式的调用都可以完成操作。matlab内部会自己封装拼接为进行请求。
如果想要更简单的ge请求可以使用webread进行操作。
POST请求
这里测试的POST的请求更为复杂,会添加自定义请求头,post body表单内容,cookie的涉及。所以没有封装成统一调用的函数,需要的自行修改咯~
import matlab.net.* %倒入Matlab网络请求库
import matlab.net.http.*
uri = URI('http://localhost:8080/testOrder/double_param/');%请求地址
%添加请求参数
qStruct.K=1;
qStruct.d2=2;
qStruct.d1=3;
qStruct.L=4;
qStruct.order_switch=1;%1开 0关
qStruct.order_size=2;
qStruct.diff_earnings=1.00009;
r = RequestMessage;
r.Method = 'POST'%使用POST请求类型
csrf = 'YYC0e8GICcEroZGDuL8THJ4ZQdwQpDqNtkBsfnaBP0XpH3rqYVNXADJGpWdo53o0'%Djabgo框架表单中防止跨站请求的参数,其实这是服务器生成的伪随机字符
qStruct.csrfmiddlewaretoken=csrf;
r.Body = matlab.net.QueryParameter(qStruct)%放入请求参数
%添加请求头
r = addFields(r,'Content-Type','application/x-www-form-urlencoded');
r = addFields(r,'Cookie',sprintf('csrftoken=%s',csrf));
response = send(r,uri);%发送请求
status = response.StatusCode%获取服务器响应的状态码
if (status==200) %一般成功响应的状态码为200 表示ok 即成功
content = response.Body.Data %获取服务器响应的内容
disp('请求成功:')
disp(content)
else
disp('请求失败')
end
%参考:
%https://ww2.mathworks.cn/help/matlab/http-interface.html
%https://ww2.mathworks.cn/help/matlab/ref/matlab.net.http.requestmessage.send.html#bu199af-6
%https://www.mathworks.com/help/matlab/ref/matlab.net.http.message.addfields.html
%https://ww2.mathworks.cn/help/matlab/ref/matlab.net.queryparameter-class.html
最后我真想说,用matlab进行网络请求是的自讨苦吃。
参考:
https://ww2.mathworks.cn/help/matlab/ref/matlab.net.uri-class.html#bvflp65-2
https://ww2.mathworks.cn/help/matlab/http-interface.html
https://ww2.mathworks.cn/help/matlab/ref/matlab.net.http.requestmessage.send.html#bu199af-6
https://www.mathworks.com/help/matlab/ref/matlab.net.http.message.addfields.html
https://ww2.mathworks.cn/help/matlab/ref/matlab.net.queryparameter-class.html