Hello, I have two collections and each of them has one reqest that gets authentication token from separate APIs. The first one works great and it returns a Json with 3 properties.
{
"access_token": "XXXXXXXXXXXXX",
"token_type": "bearer",
"expires_in": 3599
}
For other end point, I use the following pre-request script so I can consume them in one go:
const getTokenRequest = {
method: 'POST',
url: 'https://Example.api/v3/token',
header: 'Content-Type:application/json',
header: 'Accept:application/json',
body: 'grant_type=password&username=username&password=xxxxxxx'
};
pm.sendRequest(getTokenRequest, (err, response) => {
const jsonResponse = response.json();
const newAccessToken = jsonResponse.access_token;
pm.variables.set('Access_Token', newAccessToken);
});
Then I use the new variable “Access_Token” in the authorization tab for other endpoints that require authentication.
The above scenario works great. The second collection is the one I am having issues with. The token endpoint doesn’t return a json token with properties like the above. It just returns the text of the token. The following is the Api token end point
Method: Post
the url is https://Example.api/session/login
Headers:
Accept: application/vnd.v1+json
Content-Type: application/json
Body:
{"UserId": "userid","Password": "xxxxxxxx"}
It returns the token as just text
sdrlkfjgnsdlfndlfndslfnsdl
kjhndsffgdflkjnbgdslkfgnSDGSDKNNJGJsdikjngdlfknsdfldksnfs
Any help is appreciated.
To get the text response it would just be:
console.log(pm.response.text())
I’m just logging it to the console here but you can save that value to a variable and use it in the same/similar way you have in previous requests.
Maybe something basic like this structure to use in an async request from a script:
pm.sendRequest({
url: 'https://Example.api/session/login',
method: 'POST',
header: {
'headername1': 'value1',
'headername2': 'value2'
},
body: {
mode: 'raw',
raw: JSON.stringify({ UserId: '1234', Password: 'itsASecret' })
}
}, function (err, res) {
pm.collectionVariables.set(res.text());
});
Hi Danny,
Thank you for you response.
I tried your suggestion but I am getting an error in the console. See attached image.
Any thoughts?
Ali
The request looks like it returned a 400 so I’m guessing that some part of it wasn’t sent correctly.
I have zero knowledge about the request you’re sending, apart from the example you have posted. I don’t know how it’s supposed to be structured.
Check the console and see what was sent in the body of the login request
What is strange is that If I call the login endpoint separately, it works and returns a token.
Ali
I don’t know what else you have tried in the script. What was the output in the console for the request body?
It’s going to work in the main request because you’re not sending it via the script, which would have a slightly different structure and most of those things been auto done for you already.
- Try adding quotes around the key values?
- Try removing the
JSON.stringify()
the body.
Basically, trial and error. I’m not sat there in front of this so I can only make suggestions of what I might do to solve that situation, I don’t have the ‘solution’ 