Page 1 of 1
How to easy API Call
Posted: Wed Oct 09, 2019 3:13 pm
by bkromer
I want to do a GET http request with a Bearer token:
Code: Select all
function jobArrived( s : Switch, job : Job )
{
var theHTTP = new HTTP( HTTP.SSL );
theHTTP.authScheme = HTTP.OauthAuth;
theHTTP.authorization = "Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
theHTTP.url = "https://app.keyline-mis.com/api/v2/sales/orders";
theHTTP.get();
while( !theHTTP.waitForFinished( 3 ) )
{
job.log( 1, "API CALL IN PROGRESS!" );
}
if( theHTTP.finishedStatus == HTTP.Ok && theHTTP.statusCode == 200 )
{
job.log(1,"RESPONSE: ",theHTTP.getServerResponse().toString( "UTF-8" ));
}
}
In messages i get: "09.10.19 15:10,Debug,Control,,,,,HTTP GET request error: HTTP protocol error. 406 Not Acceptable." and "09.10.19 15:10,Info,Scripter control,Test Flow,Script Element,,TDB_Inapa_Clear.pdf,Script evaluation message: End jobArrived entry point with the test fixture"
Docs:
https://keyline-mis.de/docs/api#
How can i make this work?
lg
Ben
Re: How to easy API Call
Posted: Fri Jul 10, 2020 1:11 pm
by bkromer
I think I need to add a header with the bearer key instead of the theHTTP.authorization() method.
In there Docs they say:
"...
Keyline requires API users to authenticate before they can access any information, and leverages a bearer token based authentication scheme to secure access.
All valid requests to the Keyline API must therefore contain the Authorization header field, which contains a valid API key, prefixed with the string Bearer, so that the header line looks similar to the following:
Authorization: Bearer f338bc59b1ee082ee08600f85022cf7d661426ee342b22c73c18d3875f2e
......
But when I try this I get an error:
Error in line 46 of script : No matching slot found_ available overloads are:; void SHTTP::addHeader(QString_QString);
Code: Select all
var theHTTP = new HTTP( HTTP.SSL );
theHTTP.authScheme = HTTP.OauthAuth;
theHTTP.addHeader( ' "Authorization", "Bearer 6666666666666666666666666666666" ' );
theHTTP.url = "https://app.keyline-mis.com/api/v2/customer_relations/organizations";
theHTTP.get();
while (!theHTTP.waitForFinished(3)) {
job.log(1, 'API CALL IN PROGRESS!');
}
if (theHTTP.finishedStatus == HTTP.Ok && theHTTP.statusCode == 200) {
job.log(1, 'API CALL successfull RESPONSE: ' + theHTTP.getServerResponse().toString('UTF-8'));
} else {
job.log(
3,
'API CALL Failed: ' +
theHTTP.getServerResponse().toString('UTF-8') +
' Status Code: ' +
theHTTP.statusCode.toString('UTF-8')
);
}
Re: How to easy API Call
Posted: Fri Jul 10, 2020 2:30 pm
by Padawan
Can you try this?
Code: Select all
theHTTP.authScheme = HTTP.ProprietaryAuth;
theHTTP.addHeader( "Authorization", "Bearer 6666666666666666666666666666666");
When you get this error:
No matching slot found_ available overloads are
Then you are not providing the right amount of arguments in the function. In this case the header name and value should be separate arguments.
Re: How to easy API Call
Posted: Fri Jul 10, 2020 2:49 pm
by bkromer
Thank you.
Now it looks different.
The error I get now is:
HTTP GET request error: HTTP protocol error. 406 Not Acceptable.
Code: Select all
function jobArrived( s : Switch, job : Job )
{
var theHTTP = new HTTP( HTTP.SSL );
theHTTP.authScheme = HTTP.ProprietaryAuth;
theHTTP.addHeader( "Authorization", "Bearer 1234");
theHTTP.url = "https://app.keyline-mis.com/api/v2/customer_relations/organizations";
theHTTP.get();
while (!theHTTP.waitForFinished(3)) {
job.log(1, 'API CALL IN PROGRESS!');
}
if (theHTTP.finishedStatus == HTTP.Ok && theHTTP.statusCode == 200) {
job.log(1, 'API CALL successfull RESPONSE: ' + theHTTP.getServerResponse().toString('UTF-8'));
} else {
job.log(
3,
'API CALL Failed: ' +
theHTTP.getServerResponse().toString('UTF-8') +
' Status Code: ' +
theHTTP.statusCode.toString('UTF-8')
);
}
}
Re: How to easy API Call
Posted: Fri Jul 10, 2020 3:35 pm
by bkromer
Now it works, had to add another Header there.
"Accept":"application/json"
Thanks a lot!
Code: Select all
function jobArrived( s : Switch, job : Job )
{
var theHTTP = new HTTP( HTTP.SSL );
theHTTP.authScheme = HTTP.ProprietaryAuth;
theHTTP.addHeader( "Authorization", "Bearer 123456");
theHTTP.addHeader("Accept","application/json");
theHTTP.url = "https://app.keyline-mis.com/api/v2/customer_relations/organizations";
theHTTP.get();
while (!theHTTP.waitForFinished(3)) {
job.log(1, 'API CALL IN PROGRESS!');
}
if (theHTTP.finishedStatus == HTTP.Ok && theHTTP.statusCode == 200) {
job.log(1, 'API CALL successfull RESPONSE: ' + theHTTP.getServerResponse().toString('UTF-8'));
} else {
job.log(
3,
'API CALL Failed: ' +
theHTTP.getServerResponse().toString('UTF-8') +
' Status Code: ' +
theHTTP.statusCode.toString('UTF-8')
);
}
}