Hi, We have problems calling post HTTPClient request. With postman it runs perfect, but in powerscript we have an error 400 when looking for body data. getResponseBody tell us invalid request, missing grant_type It seems like not indicating correctly that parameter. Attached script code and postman images. Is something wrong?
Code:
// test http post
string ls_json
string ls_url
string ls_error
int li_rc
long ll_row,ll_return
long ll_root,ll_object,ll_item
long ll_index
long ll_id,ll_data
long ll_status
string ls_data,ls_key
string ls_User,ls_PassWord, ls_token
jsonparser lnv_jsonparser
httpclient lnv_httpclient
// create
lnv_httpclient = create httpclient
lnv_jsonparser = create jsonparser
//url
ls_url = "https://my.arrow.com/api/security/oauth/token"
// headers
lnv_HttpClient.SetRequestHeader("client_id", "dezac")
lnv_HttpClient.SetRequestHeader("Content-Type", "application/json;charset=UTF-8")
// user/password / basic auth
ls_User = "dezac"
ls_PassWord = "------------------------------------------------------"
li_rc=lnv_HttpClient.SetCredentials(False, 0, ls_user, ls_PassWord)
if li_rc<>SUCCESS then
messagebox ("Atención", "Error set credentials")
destroy lnv_httpClient
destroy lnv_jsonParser
return
end if
// data
ls_data = '{"grant_type":"client_credentials"}'
//Get the JSON string via httpclient
li_rc = lnv_httpclient.sendrequest("POST", ls_url, ls_data)
if li_rc <> SUCCESS then
messagebox("Atención","SendRequest Failed:"+lnv_httpclient.getresponsestatustext( ))
destroy lnv_httpClient
destroy lnv_jsonParser
return
end if
// get response
lnv_httpclient.getresponsebody( ls_json)
// get status code
ll_status=lnv_HttpClient.GetResponseStatusCode()
if ll_status <> 200 then
messageBox ("Atención", "status error: " + string (ll_status))
// here we see server response error invalid request: missing grant_type (client_credentials)
messageBox ("Text:", ls_json)
destroy lnv_httpClient
destroy lnv_jsonParser
return
end if
//Loads the JSON data via jsonpaser
ls_error = lnv_jsonparser.loadstring(ls_json)
if len(trim(ls_error)) > 0 then
Messagebox("Failed","Load json failed:"+ls_error)
destroy lnv_httpClient
destroy lnv_jsonParser
return
end if
//Obtains the handle of root item
ll_root = lnv_jsonparser.getrootitem( )
//Obtains the each row in a loop
for ll_index = 1 to lnv_jsonparser.getchildcount(ll_root)
// Obtains token
ls_token = lnv_jsonparser.getchildkey(ll_root, ll_index)
next
destroy lnv_httpClient
destroy lnv_jsonParser
Andreas.
I have changed contents type header by "Content-Type", "multipart/form-data as used at postman
and data by
ls_data="grant_type:client_credentials"
and seems to find grant_type parameter.
Now I'm getting a 403 error code - Forbidden access. Maibe there is a problem with basic auth.
Maibe, like postman, we have to add manually an 'Authorization' header with basic auth information. I don't know if it is correctly added automaticaly by HTTPClient
Andreas.