Configure Outbound REST Message API

mirza2
Kilo Contributor

Hi,

I have been stuck for a while to configure the HTTP method for Post using the Outbound REST Message.

Since the API will need me to send some information on the request body, such as: grant_type, resource, client_id, etc.

So, I made the configuration as below.

Screen Shot 2017-08-18 at 8.58.31 PM.png

But when I tested it, it looks like the Azure endpoint cannot recognize the Content to get the parameter for the request body with this error:

"error":"invalid_request","error_description":"AADSTS90014: The request body must contain the following parameter: 'grant_type'.

Screen Shot 2017-08-18 at 9.04.08 PM.png

I strongly believe this is because the problem on the Content-type, since I also got the same exact error when I am changing the Content-Type in another Content-type in Postman.

Screen Shot 2017-08-18 at 9.10.00 PM.png

Just for the info, this API have been tested working correctly if I use the Postman standard content-type with form data.

Screen Shot 2017-08-18 at 9.20.26 PM.png

Any suggestion or clue will much appreciated.

1 ACCEPTED SOLUTION

jarodm
Mega Guru

I think you just need to remove the curly brackets from your body and change the content-type to 'application/x-www-form-urlencoded'.



Example, using only code (no Outbound REST Message forms)


var restMessage = new sn_ws.RESTMessageV2();


restMessage.setEndpoint('http://httpbin.org/post');


restMessage.setHttpMethod('post');


//restMessage.setMIDServer('midserverbyname');


restMessage.setRequestHeader('content-type','application/x-www-form-urlencoded');


restMessage.setRequestHeader('accept','application/json');




restMessage.setRequestBody('form1=value1&form2=value2');




var response = restMessage.execute();


var httpStatus = response.getStatusCode();


var responseBody = response.haveError() ? response.getErrorMessage() : response.getBody();




if (httpStatus == '200'){


gs.info('Body: '+responseBody);




}else{


gs.info('HTTP Status: '+httpStatus);


gs.info('Error: '+responseBody);


}


View solution in original post

16 REPLIES 16

jarodm
Mega Guru

I think you just need to remove the curly brackets from your body and change the content-type to 'application/x-www-form-urlencoded'.



Example, using only code (no Outbound REST Message forms)


var restMessage = new sn_ws.RESTMessageV2();


restMessage.setEndpoint('http://httpbin.org/post');


restMessage.setHttpMethod('post');


//restMessage.setMIDServer('midserverbyname');


restMessage.setRequestHeader('content-type','application/x-www-form-urlencoded');


restMessage.setRequestHeader('accept','application/json');




restMessage.setRequestBody('form1=value1&form2=value2');




var response = restMessage.execute();


var httpStatus = response.getStatusCode();


var responseBody = response.haveError() ? response.getErrorMessage() : response.getBody();




if (httpStatus == '200'){


gs.info('Body: '+responseBody);




}else{


gs.info('HTTP Status: '+httpStatus);


gs.info('Error: '+responseBody);


}


mirza2
Kilo Contributor

Hi Jarod,



I've tried with your suggestion to set the content-type with 'application/x-www-form-urlencoded', and write the content as below, and I can see the endpoint can read the content now (even with the new error come up).



Screen Shot 2017-08-19 at 2.16.51 PM.png


I've learned that with 'application/x-www-form-urlencoded' content type, some special character such as: & - : + , / = need to be encoded first to UTF-8 format unless the endpoint will falsely parse the content. I can tackle this issue by replacing those characters with the correspond format in my script.



Anyway, if you have any other suggestion, or to make this more improved, you're welcome.




I hope everything got resolved and is testing well. I will likely be doing an Office365 integration later this year and will definitely return to this post to job my memory.



Jarod


mirza2
Kilo Contributor

Hi Jarod,



I have tested for a couple days in my Dev environement, and seems it's just fine using the 'application/x-www-form-urlencoded' content type .



However, I am still curious why the Azure endpoint unable to read the "application/json" content-type which was sent by Outbound Rest Message form (which I set up in my first post). I have ever tried with the other URL end points, and it just working fine by putting json-formatted content in Outbound Rest Message.



Maybe I should go to the Hi Support to look for the answer.



Anyway, thank you for your help, and good luck with your work 🙂



P.S: I will continue to post the comment once I got feedback from the Support.