Forum Discussion
how to get cookies from a request to an API?
I am making a request to an endpoint that returns a cookie in the headers, I will use said cookie later in a request that I will pass said cookie as a header. So the steps I need to take are:
1. Make a request to the endpoint that returns the cookie.
2. Make another request to the endpoint where I authenticate with username and password and as header I send the CSRF TOKEN obtained in step 1.
3. I make another request being already authenticated, passing only the Cookie obtained in step 1, said endpoint returns the json that will be the da with which I will work.
What interests me most is being able to obtain the cookie to pass it to the authentication endpoint.
I am currently trying the following to solve the problem in step 1:
let
vUrlGetCSRFTOKEN = "https://my-domain.com/api/csrf-cookie",
TokenBaseUrl = Text.Combine({Uri.Parts(vUrlGetCSRFTOKEN)[Scheme],"://",Uri.Parts(vUrlGetCSRFTOKEN)[Host]}),
TokenRelativePath = Uri.Parts(vUrlGetCSRFTOKEN)[Path],
TokenQuery = Uri.Parts(vUrlGetCSRFTOKEN)[Query],
md = Value.Metadata(Web.Contents(vUrlGetCSRFTOKEN, [
Headers=[Accept="application/json", Connection="keep-alive",
#"Accept-Encoding"="gzip, deflate"],
IsRetry=true
]
))
in
md
But when looking in the headers I don't see the cookie anywhere.
I have previously replicated all this functionality in postman in the following way:
pm.sendRequest({
url: 'https://my-domain.com/api/csrf-cookie', //This is Step 1, GET THE COOKIES
method: 'GET',
headers:{
'Accept': 'application/json',
'Connection':'keep-alive',
'User-Agent': 'PostmanRuntime/7.29.0',
'Accept-Encoding': 'gzip, deflate, br',
},
}, function (error, response, { cookies }) {
console.log("GET COOKIE");
console.log(response);
console.log(cookies);
if (!error) {
pm.environment.set('xsrf-cookie', cookies.get('XSRF-TOKEN'));
pm.sendRequest({
url: 'https://my-domain.com/api/auth',
method: 'POST',
header:{
'X-XSRF-TOKEN': cookies.get('XSRF-TOKEN'),//STEP 2, AUTHENTICATE ME AND PASS THE COOKIE FROM STEP 1
'Accept': 'application/json',
'Connection':'keep-alive',
'User-Agent': 'PostmanRuntime/7.29.0',
'Accept-Encoding': 'gzip, deflate, br',
},
body: {
mode: 'formdata',
formdata: [{
"key": "email",
"value": "[email protected]",
},
{
"key": "password",
"value":"111122333"
}]
}
}, async function(err, res){
console.log("RESULT TO LOGIN");
console.log(res);
pm.sendRequest({
url: 'https://my-domain.com/api/get_list', //GET THE DATA TO WORK
method: 'POST',
header:{
'X-XSRF-TOKEN': cookies.get('XSRF-TOKEN'),
'Accept': 'application/json',
'Connection':'keep-alive',
'User-Agent': 'PostmanRuntime/7.29.0',
'Accept-Encoding': 'gzip, deflate, br'
},
body:{
mode:'raw',
raw: JSON.stringify(
{
page: 1,
pageSize: 50,
sort: {},
type: "page"
}
)
}
}, async function(err, res){
console.log("RESULT PBI RESPONSE");
console.log(res);
});
});
}
})
Thank you !
8 Replies
- Neiners
Helper II
I am having the same issue! I can't figure out how to get the cookie information from step 1 and then passing it to the following steps.
- AnonymousNot applicable
Hi there,
I did give up on this -- all suggestions did not work.
If you figure this out --> tell me 🙂
- AnonymousNot applicable
Hi Anonymous ,
Maybe this similar post could help you,
Solved: Saving Cookies from POST Request to Rest API - Microsoft Power BI Community
Best Regards,
Stephen Tao
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.
- AnonymousNot applicable
Thank you for your time, but the link you sent me could help me with step 2 and 3 that I also have to do. But I need to solve step 1, without step 1, I can't get step 2 and step 3. Thank you very much!
- AnonymousNot applicable
Did you solve the issue with getting the cookie from the original request?
I have a similar issue and cannot figure out how to obtain the cookie - sdominguesFrequent Visitor
Did you manage to do this? I'm basically trying the same thing and I can't see the response header token anywhere.
- AnonymousNot applicable
I did give up on this -- all suggestions did not work.
If you figure this out --> tell me- sdominguesFrequent Visitor
I did it by implementing a custom connector and using it as datasource, it's not that hard. Check this urls:
https://learn.microsoft.com/en-us/power-query/creating-first-connector
https://learn.microsoft.com/en-us/power-query/handling-authentication#authentication-kinds
note that you'll need to create an on-premises data gateway in order to be able to schedule refreshes for that report in power bi service, check this url:
https://learn.microsoft.com/en-us/power-bi/connect-data/service-gateway-custom-connectors