How can I form this http request correctly in matlab

조회 수: 13 (최근 30일)
Simon Parten
Simon Parten 2017년 11월 28일
댓글: Simon Parten 2018년 1월 26일
This request, expressed in XML, works fine in a rest client.
I should clarify, that I work inside a corporate firewall. The request goes outside that.
<RestClientRequest>
<option name="httpMethod" value="POST" />
<option name="urlBase" value="https://aWebsite.net" />
<option name="urlPath" value="/atoken" />
<option name="headers">
<list>
<KeyValuePair>
<option name="key" value="Content-Type" />
<option name="value" value="application/x-www-form-urlencoded" />
</KeyValuePair>
<KeyValuePair>
<option name="key" value="Cache-Control" />
<option name="value" value="no-cache" />
</KeyValuePair>
</list>
</option>
<option name="parameters">
<list>
<KeyValuePair>
<option name="key" value="username" />
<option name="value" value="me" />
</KeyValuePair>
<KeyValuePair>
<option name="key" value="password" />
<option name="value" value="verySecret" />
</KeyValuePair>
<KeyValuePair>
<option name="key" value="grant_type" />
<option name="value" value="password" />
</KeyValuePair>
</list>
</option>
<option name="parametersEnabled" value="true" />
<option name="haveTextToSend" value="false" />
<option name="haveFileToSend" value="false" />
<option name="isFileUpload" value="false" />
<option name="textToSend" value="" />
<option name="filesToSend" value="" />
</RestClientRequest>
For the life of me, I cannot express it in matlab, I only ever get back 'Bad Request'. Can anyone help?
api = 'https://aWebsite.net/aToken';
body.username = 'me';
body.password = 'verySecret';
body.grant_type = 'password';
options = weboptions('MediaType', 'application/json' ,'RequestMethod','post','ArrayFormat','json');
respon = webwrite(api, body, options);
  댓글 수: 1
Simon Parten
Simon Parten 2017년 11월 28일
equally useless...
headerField = matlab.net.http.field.ContentTypeField('application/x-www-form-urlencoded');
un = 'me';
pw = 'verySecret';
input = struct('Username',un,'Password',pw, 'grant_type', 'password');
inputParameters = struct('parameters', input);
aTest = jsonencode(inputParameters);
options = matlab.net.http.HTTPOptions();
method = matlab.net.http.RequestMethod.POST;
request = matlab.net.http.RequestMessage(method,headerField, aTest);
show(request)
resp = send(request,uri, options);

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

채택된 답변

Sonam Gupta
Sonam Gupta 2017년 12월 7일
According to my understanding, you want to read content from a RESTful webservice. When query parameters are to be appended to the URL, something like following should work:
url = 'https://aWebsite.net/aToken';
options = weboptions('RequestMethod', 'post', 'ArrayFormat','json');
data = webread(url,'username', 'me', 'password', 'verySecret', 'grant_type', 'password', options);
To encode the name-value pairs in the body of an HTTP POST request to the web service, you need to use webwrite. The web service defines response. Following example shows how you can use webwrite:
You can find more information and example about 'webread' and 'webwrite' at following links:
  댓글 수: 2
Simon Parten
Simon Parten 2017년 12월 7일
Sadly, this doesn't work. I've had sucess with Excel VBA as follows.
Function getToken()
Dim xmlhttp As New MSXML2.XMLHTTP60
Dim myurl As String
Dim iCreds As iLogin
myurl = iStub & "aToken"
xmlhttp.Open "POST", myurl, False
xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
xmlhttp.setRequestHeader "Cache-Control", "no-cache"
ilmaCreds = readiLogin()
uname = iCreds.name
pword = iCreds.pword
xmlhttp.Send "grant_type=password&username=" & uname & "&password=" & pword
Set json = ParseJson(xmlhttp.responseText)
getToken = json("access_token")
End Function
When trying to reproduce this request in matlab, I have never managed to get any response other than 'Bad Request'. This makes me suspicious about the underlying mechanism and / or error message that is being reported.
Simon Parten
Simon Parten 2018년 1월 26일
There was a deeper problem to do with security. Once that was fixed, it was easy to form web requests as per the documentation.

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

추가 답변 (0개)

카테고리

Help CenterFile 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!

Translated by