1. Joan Lopez Moreno
  2. PowerBuilder
  3. Friday, 12 January 2024 07:30 AM UTC
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

 

Attachments (1)
Andreas Mykonios Accepted Answer Pending Moderation
  1. Friday, 12 January 2024 09:20 AM UTC
  2. PowerBuilder
  3. # 1

Hi.

Never used their service, but are you sure that grant_type should be sent as json? Have you tried to set ls_data as:

ls_data = "grant_type=client_credentials"

MyArrow Developer Portal | API Documentation For Developers

Are you doing something different in postman?

Andreas.

Comment
  1. Andreas Mykonios
  2. Friday, 12 January 2024 09:46 AM UTC
Don't know if the following link may help https://community.appeon.com/index.php/qna/q-a/http-post.

Andreas.
  1. Helpful 1
  1. Joan Lopez Moreno
  2. Friday, 12 January 2024 10:41 AM UTC
Thanks a lot

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
  1. Helpful
  1. Andreas Mykonios
  2. Friday, 12 January 2024 10:55 AM UTC
Yes. You can add basic authorization. You should do something like lnv_httpClient.SetRequestHeader( "Authorization", "Basic " + ls_authinfo), where ls_authinfo should contain "username:password" but encoded in base64.

Andreas.
  1. Helpful
There are no comments made yet.
  • Page :
  • 1


There are no replies made for this question yet.
However, you are not allowed to reply to this question.