Forum Discussion
Not being able to access data via API Post Request
Hi,
I have been trying to import data using Trulinks Road Haulage Association, UK(RHA) APIs. Most of the API requests are POST while rest of them being GET. GET APIs have been straightforward while POST requests are posing problems. By Default, Web.Contents sends a GET request while a different approach is needed for POST.
How can I import data via POST request?
Thanks
Hi ziyabikram96
Including Content in your request makes the Web.Contents perform a POST, for example:
Source = Json.Document(Web.Contents(url,[ Headers = [#"Content-Type"="application/json"], Content = Text.ToBinary(body) ] ))I don't know exactly what you need to provide in the request (e.g. API Auth,Headers) as I don' t know the API,but this should get you started. Post back if you need further assistance.
regards
Phil
6 Replies
- PhilipTreacySuper User
Hi ziyabikram96
Including Content in your request makes the Web.Contents perform a POST, for example:
Source = Json.Document(Web.Contents(url,[ Headers = [#"Content-Type"="application/json"], Content = Text.ToBinary(body) ] ))I don't know exactly what you need to provide in the request (e.g. API Auth,Headers) as I don' t know the API,but this should get you started. Post back if you need further assistance.
regards
Phil
- davemaysNew Member
What if the API requires Windows Authentication?
Excel reports back that neither adding "contents" nor adding a method="POST" is allowed for anything but anonymous authentication. How do you post against an API behind Windows Authentication?
If you were building a C# application, it can easily use Windows Authentication to negotiate with the server, and you don't have to manually add the credentials either. It seems that post requests to Windows autorized APIs would be a very common use case in corporate environments, but I have not found a way to do so in Power Query. - BokangmaelaHelper I
Is there a way to cater for a PUT request ?
- MarcusR1Helper II
Hi PhilipTreacy
I've got a similar issue, i can run all these in postman with no issues, but PQ causes no end of problems. this is what i have, but it throws errors DataSource.Error: Web.Contents failed to get contents from 'https://myapidomain.com/v0/auth/code' (500): Internal Server Error
and
Expression.Error: We cannot convert a value of type Binary to type Text. Details: Value=[Binary] Type=[Type]let
apiBaseUrl = #"API URL",
apiEmail = #"API Email",
accessCode = #"Access Code",AuthUrl = apiBaseUrl & "/auth/code",
RawBody = "{
""meta"": {},
""data"": {
""email"": """ & apiEmail & """,
""code"": """ & accessCode & """
}
}",Response = Web.Contents(
AuthUrl,
[
Headers = [
#"Content-Type" = "application/json",
#"Accept" = "application/json",
#"Accept-Language" = "en",
#"User-Agent" = "PostmanRuntime/7.32.0" // mimic Postman
],
Content = Text.ToBinary(RawBody, TextEncoding.Utf8)
]
),ResponseText = Text.FromBinary(Response, TextEncoding.Utf8),
Parsed = Json.Document(ResponseText),
AccessToken = Parsed[data][access_token]
in
AccessToken
- ziyabikram96Helper V
Thank alot, Philip.