Inconsistent connection to Restful api using the HTTP interface
이전 댓글 표시
The site i am connecting provide a public and private key for Restful connection. They provided a JAVA example to connect so i tried to re-implement it. I have created my own RequestMessage header(date,method,authorization,accept) with matlab.net.http.field.GenericField which contain hmacsha1 of pivate key,message followed by base64 encoding.
I have managed to get the Restful api data but most of the time it give me 401 unauthorized error so i need to run the script three to five times to get authenticated. Is this a normal behaviour when using the http interface? When i use the site provided python and java application it can connect without this behaviour.
clc;clear all;
cy_public = 'bedaf676-bab0-4e25-xx-xx';
cy_private = '30a236a4-ab5c-4514-xx-xx';
suburl = '/api/annotation/5357434.json';
url = ['http://example.edu.my',suburl];
formatOut = 'ddd, dd mmm yyyy HH:MM:SS';
tt = datetime('now','TimeZone','UTC');
cy_date = [datestr(tt,formatOut),' +0000'];
cy_url = [newline,suburl];
cy_action = ['GET',newline,newline,newline];
hmac = System.Security.Cryptography.HMACSHA1(uint8(cy_private)).ComputeHash(uint8([cy_action,cy_date,cy_url]));
cy_sha1 = native2unicode(hmac);
%%%cy_sha1 = doHMAC_SHA1([cy_action,cy_date,cy_url],cy_private);
payload = base64encode(cy_sha1);
cy_sign=['CYTOMINE ',cy_public,':',payload];
cy_header_1 = matlab.net.http.field.GenericField('date',cy_date);
cy_header_2 = matlab.net.http.field.GenericField('X-Requested-With','XMLHttpRequest');
cy_header_3 = matlab.net.http.field.GenericField('authorization',cy_sign);
cy_header_4 = matlab.net.http.field.GenericField('accept','application/json,*/*');
cy_header_5 = matlab.net.http.field.GenericField('Accept-Encoding','identity');
header = [cy_header_5 cy_header_1 cy_header_2 cy_header_3 cy_header_4];
reqline = matlab.net.http.RequestLine('GET',cy_url,'HTTP/1.1');
cy_req = matlab.net.http.RequestMessage(reqline,header,[]);
uri = matlab.net.URI(url);
options = matlab.net.http.HTTPOptions('Authenticate',false);
[response,completedrequest,history] = send(request,uri,options);
response.Body.Data % shows the json data
채택된 답변
추가 답변 (0개)
카테고리
도움말 센터 및 File Exchange에서 Call Web Services from MATLAB Using HTTP에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!