webread with authentication returns HTTP error 400

조회 수: 5 (최근 30일)
Mark Morehead
Mark Morehead 2015년 12월 30일
댓글: Aminu bugaje 2020년 3월 19일
I am attempting to use webread to download data from a REST web service that uses authentication. I am having problems and I think it is with the authentication. I can put the following into a web browser and get the data I want to appear in the browser:
http://dummyserver/AQUARIUS/Publish/AquariusPublishRestService.svc/GetAuthToken?user=dummyname&encPwd=dummypassword
I get a successful token like: 9fab1c9fee2a18bd6c2b889595d61131. Then I put the following into the web browser
http://dummyserver/AQUARIUS/Publish/AquariusPublishRestService.svc/GetTimeSeriesData?dataId=QRiv.Derived-Working-DayMean@13235000%20S%20Fk%20Payette%20Riv%20at%20Lowman,%20ID&view=Public&queryFrom=2014-09-01%2000%3A00%3A00&queryTo=2014-09-02%2000%3A00%3A00&tok=9fab1c9fee2a18bd6c2b889595d61131
This gives me the data that I expect (a text file in the web browser). I turn this into Matlab code:
usr = 'dummyname';
pwd = 'dummypassword';
url = 'http://dummyserver/AQUARIUS/Publish/AquariusPublishRestService.svc';
dat = '/GetTimeSeriesData?dataId=QRiv.Derived-Working-DayMean@13235000%20S%20Fk%20Payette%20Riv%20at%20Lowman,%20ID&view=Public&queryFrom=2014-09-01&queryTo=2014-09-02';
urltok = [ url, '/GetAuthToken?user=', usr, '&encPwd=', pwd ];
tok = webread( urltok )
tok = 8cef334c4b48f452634fdf3ee8208a4b % this works
urldat = [ url, dat, '&tok=', tok ]
data = webread([ urldat ]) % *this does not work*
And I get the following response from the last webread()
Error using readContentFromWebService (line 46)
The server returned the message: "Bad Request" for URL,
'http://dummyserver/AQUARIUS/Publish/AquariusPublishRestService.svc/GetTimeSeriesData?dataId=QRiv.Derived-Working-DayMean%4013235000%20S%20Fk%20Payette%20Riv%20at%20Lowman%2C%20ID&view=Public&queryFrom=2014-09-01&queryTo=2014-09-02&tok=8cef334c4b48f452634fdf3ee8208a4b'
(with HTTP response code 400).
Error in webread (line 122)
[varargout{1:nargout}] = readContentFromWebService(connection, options);
Error in get_aquarius_test (line 51)
data = webread([ urldat ])
From what I have read the 400 error code means that the request was malformed. However, I can't figure out what is malformed about the request.
Can anyone tell me how to check what Matlab is actually sending to the server so I can try to determine how it is malformed? Or can you give me other advise on how to solve this.
Other information: The Aquarius server is internal to my company and is on our own computers. I have tried different web browsers and they all seem to work fine, just Matlab has the problem. The Aquarius server stores hydrologic information and is from http://aquaticinformatics.com/.
  댓글 수: 3
Mark Morehead
Mark Morehead 2016년 4월 12일
No. I got busy solving other problems. I need to get back to this at some point.
Luis Galindo
Luis Galindo 2017년 4월 14일
Any answers to this yet?

댓글을 달려면 로그인하십시오.

답변 (1개)

Tushar Athawale
Tushar Athawale 2016년 1월 4일
Please specify the parameters for your URL using "weboptions" in MATLAB. For example, you will need to call "webread" as follows:
>> options = weboptions;
>> options.Username = '<username>';
>> options.Password = '<password>';
>> options.ContentType = 'json';
>> options.RequestMethod = 'Get';
>> URL = 'https://domain.com/path/to/data';
>> response = webread(URL, options)
  댓글 수: 4
YH
YH 2018년 1월 28일
편집: YH 2018년 1월 28일
Similar to above approach would be to pass in the access token to HeaderFields. I had similar issue using Oauth2 and the below worked:
headerFields = {'Authorization', ['Bearer ', access_token]};
options = weboptions('HeaderFields', headerFields, 'ContentType','json');
data = webread(url, options);
Aminu bugaje
Aminu bugaje 2020년 3월 19일
data_forecast = webread('https://api.solcast.com.au/world_pv_power/estimated_actuals?latitude=-0.436791&longitude=34.206028&capacity=30&tilt=12&azimuth=0&loss_factor=0.9&format=csv&api_key=Q7pW-PeeTU6yYc3yHd3MwWNOJf627_Hc')
data_thingspeak=webread('https://api.thingspeak.com/channels/1016041/feeds.json?api_key=556BHJ6KBKSUA7DV&')

댓글을 달려면 로그인하십시오.

커뮤니티

더 많은 답변 보기:  ThingSpeak 커뮤니티

카테고리

Help CenterFile Exchange에서 Web Services에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by